![見出し画像](https://assets.st-note.com/production/uploads/images/121792489/rectangle_large_type_2_c67991529dd7dd0ab75daa3a64170dec.png?width=1200)
AIの心臓部!ニューラルネットワークの基本を学ぶ
はじめに
ニューラルネットワークは、人間の脳を模倣した計算モデルであり、現代の人工知能(AI)技術の根幹を成すものです。この記事では、ニューラルネットワークの基本概念、メリットとデメリット、実際のプロジェクトでの応用例について紹介します。
なぜニューラルネットワークが必要なのか?
ニューラルネットワークは、複雑なパターン認識、データ分析、予測モデリングなどに非常に有効です。人間の脳のように、大量のデータから学習し、未知のデータに対しても柔軟に対応できるため、多様な分野で活用されています。
メリット
高い適応性: ニューラルネットワークは、様々なタイプのデータに対して適用可能です。
優れた学習能力: 大量のデータから複雑なパターンを学習できます。
汎用性: 画像認識、言語処理、予測分析など、幅広い用途に利用できます。
デメリット
計算コストが高い: 大規模なネットワークは計算リソースを多く消費します。
過学習のリスク: データが限られている場合、過剰に特定のデータセットに適応してしまう可能性があります。
解釈の難しさ: ニューラルネットワークの決定過程はしばしば「ブラックボックス」とされ、理解が難しい場合があります。
実プロジェクトでの使用例
ニューラルネットワークは、手書き文字の認識、自動運転車のセンサー解析、株価予測、医療画像の分析など、様々な分野で利用されています。
サンプルコード
以下は、Pythonを使用した基本的なニューラルネットワークの実装例です。ここでは、単純なパーセプトロンを用いて、簡単な分類問題を解決します
import numpy as np
# 単純なパーセプトロンのクラス
class Perceptron:
def __init__(self, input_size, lr=1):
self.W = np.zeros(input_size + 1)
self.lr = lr
def activation_fn(self, x):
return 1 if x >= 0 else 0
def predict(self, x):
z = self.W.T.dot(x)
a = self.activation_fn(z)
return a
def fit(self, X, d):
for _ in range(100):
for i in range(d.shape[0]):
x = np.insert(X[i], 0, 1)
y = self.predict(x)
e = d[i] - y
self.W = self.W + self.lr * e * x
# データセットの作成
X = np.array([
[2, 7],
[8, 1],
[7, 5],
[6, 3],
[4, 8],
[5, 2]
])
d = np.array([0, 1, 1, 1, 0, 0])
# パーセプトロンのインスタンス化と学習
perceptron = Perceptron(input_size=2)
perceptron.fit(X, d)
# テストデータの作成と予測
test_data = np.array([
[8, 2],
[7, 4],
[5, 3]
])
test_predictions = [perceptron.predict(np.insert(data, 0, 1)) for data in test_data]
test_predictions
分類結果を視覚化
import matplotlib.pyplot as plt
# データ点のプロット
for i in range(len(X)):
if d[i] == 0:
plt.scatter(X[i][0], X[i][1], color='red', label='Class 0' if i == 0 else "")
else:
plt.scatter(X[i][0], X[i][1], color='blue', label='Class 1' if i == 0 else "")
# テストデータ点のプロット
for i, test_point in enumerate(test_data):
plt.scatter(test_point[0], test_point[1], color='green', marker='x', label='Test Data' if i == 0 else "")
# グラフの設定
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('Perceptron Classification')
plt.legend()
plt.grid(True)
plt.show()
![](https://assets.st-note.com/img/1700045335782-P7MocNzQ0f.png)
上記のグラフは、パーセプトロンモデルによる分類結果を視覚化したものです。データポイントは次のように表されています:
赤色の点:クラス 0 に属するトレーニングデータ
青色の点:クラス 1 に属するトレーニングデータ
緑色の「×」印:テストデータ
このグラフから、トレーニングデータに基づいたモデルの分類境界と、テストデータ点の位置関係を確認することができます。ただし、この単純なパーセプトロンモデルは線形分離可能なデータにのみ適用可能であり、より複雑なデータセットには適していないことに注意が必要です。
この3冊はめっちゃいいです。オススメ!