科学の箱

科学・IT・登山の話題

機械学習

irisデータについて簡単な機械学習をしてみる

投稿日:

irisデータを使って簡単な機械学習をしてみる。

ここで説明している内容は以下になる。

  • データの読み込み、前処理
  • トレインデータと検証データへの分割
  • モデル選定
  • モデル構築および検証

データの読み込み、前処理

手順としては以下になる。

  • データの読み込み
  • 目的変数作成
  • 説明変数作成

データの読み込み

データを読み込むところはseabornで説明したのと同じになる。

seaborn.load_dataset()を使う。引数に’iris’を指定する。

import seaborn as sns
iris = sns.load_dataset('iris')
iris.head()

説明変数を作成

説明変数は目的変数以外の変数をすべて使う。

DataFrame.drop()で目的変数である’species’列を削除する。

DataFrame.drop(self, labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors=’raise’)

X_iris.head()axis: 列方向の削除とするために、1を指定する。

X_iris = iris.drop('species', axis=1)
X_iris.head()

 

species列が削除されている。

目的変数を作成

目的変数はirisの種類を表すspecies列になる。この列だけを抜き出したデータフレームを作成する。

y_iris = iris['species']
y_iris.head()

 

 

トレーニングデータと検証データへの分割

さて次にデータをトレーニング用と検証用に分割する。すべてのデータをトレーニング用にした場合過学習が起きる可能性がある。過学習ではトレーニングデータに関してはモデルは90%以上に達する程度に適合するが、別のデータを用いる場合は低い適合度しかならない。過学習を避けるためにトレーニングデータと検証用データに分割して適切な学習レベルになっているかを確認する。

データの分割はtrain_test_split()関数を利用する。

 

train_test_split()は下記の引数をとる

arrays 分割対象となるデータ
test_size テストデータの割合。デフォルトは0.25
train_size 訓練用データの割合。デフォルトは1-test_size
random_state ランダム変数のシード

train_test_split()の戻り値は以下の通り。

  • X_train: 訓練用データ
  • X_test: 検証用データ
  • Y_train: 訓練用データの正解ラベル
  • Y_test: 検証用データの正解ラベル
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_iris, y_iris,random_state=1)

X_train.shape
# (112, 4)

X_test.shape
# (38, 4)

 

モデル選定

scikit-learnを利用するにあたり最も核心となるのはモデル選定である。モデルが選択できればモデル構築は数行のコードを描いて完了する。しかしモデルが正しくなければ適合率は低いままであり、求めている結果にはならない。機械学習を始めたばかりであれば、チートシートを利用するのが良い。。

Choosing the right estimator

 

  1. スタートから開始する。
  2. サンプルの件数を確認する。50件以上ある。
    X_train.shape
    # (112,4)
  3. カテゴリデータを予測したい
  4. 正解ラベルを持っている
  5. サンプルは100k以下である。
  6. LinearSVCを選択する

モデルの構築および検証

前項でLinearSVCを選定した。今回は実際にモデルを構築する。

 

主な引数

penalty 罰則項、過学習の程度を調整
loss 損失関数、学習の程度を調整
from sklearn import svm
clf=svm.LinearSVC(max_iter=10000)
clf.fit(X_train, y_train)

max_iter = 10000を指定しないと収束せずに以下のエラーが出る。

 

Liblinear failed to converge, increase the number of iterations.

モデルの検証

モデルの正答率はaccuracy_scoreで求める。

sklearn.metrics.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)

パラメータは以下の通り

y_true 正解ラベル
y_pred 予測したラベル
from sklearn.metrics import accuracy_score
y_model = clf.predict(X_test)
ac_score = accuracy_score(y_test, y_model)
print("accuracy score: ", ac_score)

 

メタ情報

inarticle



メタ情報

inarticle



-機械学習

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

ポワソン分布の利用

一時間に平均7通のメールが来るとき100回試行した時のメール受信件数を調べる > rpois(100,7)  [1]  7 10  2  8  5  4  4  9  2  3  9  6  9 …

no image

仕事で始める機械学習 – 1. 機械学習プロジェクトの始め方

機械学習プロジェクトの流れ 問題の定式化 機械学習を利用しない方法 システム設計 アルゴリズム選定 特徴量・教師データ・ログの設計 前処理 学習・パラメータチューニング システム統合 問題の定式化 目 …

no image

dataanalysis-002-week5

ANOVA – quantitative 分散分析、数学的に分散分析と重回帰分析は同じ 分散分析では3群以上の平均の差異を検定する ただし非線形では異なる http://oshiete.g …

no image

ラテン方格

ラテン方格は1~nまでの数字についてn x nの正方行列に一回だけ現れるように並べたものである。ラテン方格を利用して実験の割り付けを行う実験計画法がラテン方格法である。 ラテン方格法と似た実験計画法に …

no image

独立性の検定 2つ

ニートの年齢別割合が1996年と2012年で関連性があるか独立性の検定をしてみる。 ニートの割合  1996 2012 15~19歳 9 9 20~24歳 12 17 25~29歳 10 18 30~ …

2019年9月
« 8月   10月 »
 1
2345678
9101112131415
16171819202122
23242526272829
30  

side bar top



アーカイブ

カテゴリー