1
1

More than 3 years have passed since last update.

Pythonによる AI・機械学習について学んだ内容(3)

Posted at

はじめに

この本を使って勉強しています
Pythonによる AI・機械学習・深層学習アプリのつくり方

scikit-learn

Python向けの機械学習フレームワークの定番
http://scikit-learn.org/

次の特徴がある

  • 機械学習で使われるさまざまなアルゴリズムに対応
  • すぐに機械学習を試すことができるようにサンプルデータが含まれる
  • 機械学習の結果を検証する機能を持っている
  • 機械学習でよく使われる他のライブラリ(Pnadas, Numpy, scipy, Matplotlib etc)と親和性が高い
  • BSDライセンスのオープンソースのため無料で商用利用可能

アルゴリズムを選択する

https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html
image.png
どのような機械学習をしたいか、どのようなデータを準備しているのかなどの条件をたどっていくとアルゴリズムを選択できるようになっている。

AND演算を機械学習する

and.py
# ライブラリをインポートする
from sklearn.svm import LinearSVC            # LinearSVC アルゴリズムを利用するためのパッケージ(sklearn.svm.LinearSVC)
from sklearn.metrics import accuracy_score   # テスト結果を評価するためのパッケージ(sklearn.metrics.accuracy_score)


#学習データを用意
learn_data  = [[0, 0], [1, 0], [0, 1], [1, 1]] # 学習用の入力データ(AND の入力値)
learn_label = [0, 0, 0, 1]                     # 学習用の結果データ(AND の出力値)

# アルゴリズムの指定
clf = LinearSVC()  

# 学習する(学習用の入力データと結果データを渡す)
clf.fit(learn_data, learn_label)               # 学習用の入力データと結果データを渡す

# 学習を検証する
test_data = [[0, 0], [1, 0], [0, 1], [1, 1]]   # テストデータの入力データを用意
test_label = clf.predict(test_data)            # テストデータの結果を取得

# テストデータの結果を表示
print(test_data, "の予測結果", test_label)

# 正解率を表示
Accuracy_rate= accuracy_score([0, 0, 0, 1], test_label) # accuracy_score(正解データ, テストの結果)
print("正解率:", Accuracy_rate)
[[0, 0], [1, 0], [0, 1], [1, 1]] の予測結果 [0 0 0 1]
正解率: 1.0

AND論理演算を正しく学習している。
線形に分類できるものは、LinearSVCアルゴリズムで解決できる。
でも、XORは?

使用される単語

  • SVM(Support Vector Machine)
     「本当に予測に必要となる一部のデータ」のこと
      このサイトがわかりやすい

  • Linear SVM Classification ... 線形 SVM 分類

  • accuracy ... 精度・正確さ

  • classification ... 分類

  • classifier ... 分類器

  • fit ... 学習する(適合する)

  • predict ... 予測する

XOR演算を機械学習する

xor.py
# ライブラリをインポートする
from sklearn.svm import LinearSVC            # LinearSVC アルゴリズムを利用するためのパッケージ(sklearn.svm.LinearSVC)
from sklearn.metrics import accuracy_score   # テスト結果を評価するためのパッケージ(sklearn.metrics.accuracy_score)


#学習データを用意
learn_data  = [[0, 0], [1, 0], [0, 1], [1, 1]] # 学習用の入力データ(XORの入力値)
learn_label = [0, 1, 1, 0]                     # 学習用の結果データ(XORの出力値)

# アルゴリズムの指定
clf = LinearSVC()  

# 学習する(学習用の入力データと結果データを渡す)
clf.fit(learn_data, learn_label)               # 学習用の入力データと結果データを渡す

# 学習を検証する
test_data = [[0, 0], [1, 0], [0, 1], [1, 1]]   # テストデータの入力データを用意
test_label = clf.predict(test_data)            # テストデータの結果を取得

# テストデータの結果を表示
print(test_data, "の予測結果", test_label)

# 正解率を表示
Accuracy_rate= accuracy_score([0, 1, 1, 0], test_label) # accuracy_score(正解データ, テストの結果)
print("正解率:", Accuracy_rate)
[[0, 0], [1, 0], [0, 1], [1, 1]] の予測結果 [0 0 0 0]
正解率: 0.5

うーん、線形では正しく分類できない。

xor2.py
# ライブラリをインポートする
from sklearn.neighbors import KNeighborsClassifier # LinearSVC アルゴリズムを利用するためのパッケージ(sklearn.svm.LinearSVC)
from sklearn.metrics import accuracy_score         # テスト結果を評価するためのパッケージ(sklearn.metrics.accuracy_score)


#学習データを用意
learn_data  = [[0, 0], [1, 0], [0, 1], [1, 1]] # 学習用の入力データ(XORの入力値)
learn_label = [0, 1, 1, 0]                     # 学習用の結果データ(XORの出力値)

# アルゴリズムの指定
clf = KNeighborsClassifier(n_neighbors = 1)  

# 学習する(学習用の入力データと結果データを渡す)
clf.fit(learn_data, learn_label)               # 学習用の入力データと結果データを渡す

# 学習を検証する
test_data = [[0, 0], [1, 0], [0, 1], [1, 1]]   # テストデータの入力データを用意
test_label = clf.predict(test_data)            # テストデータの結果を取得

# テストデータの結果を表示
print(test_data, "の予測結果", test_label)

# 正解率を表示
Accuracy_rate= accuracy_score([0, 1, 1, 0], test_label) # accuracy_score(正解データ, テストの結果)
print("正解率:", Accuracy_rate)
[[0, 0], [1, 0], [0, 1], [1, 1]] の予測結果 [0 1 1 0]
正解率: 1.0

KNeighborsClassifierアルゴリズムを使うと学習できた。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1