科学の箱

科学・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

回帰と分類の違い

回帰と分類は両方とも”予測”問題である。予測とは従属変数から目的変数を明らかにする。この目的変数の種類により回帰と分類に分けられる。 回帰では連続した数値を予測する。例えば株価 …

no image

dataanalysis-002-week2

Structure of Data Analysis 質問を定義する 理想的なデータセットの定義 アクセスできるデータの検索 データの取得 クレンジング Exploratory 統計的予測・モデリング …

no image

仕事で始める機械学習 – 2.機械学習で何ができるか – 分類 – SVM

SVMの決定境界 SVMの決定境界はSVMで利用するカーネルにより異なる。 線形カーネル→線形 RBFカーネル→非線形 損失関数 損失関数としてはヒンジ関数を利用するが、パーセプトロンとは異なり、横軸 …

no image

Pythonではじめる機械学習 – Chap04

4.4 Binning, Discretization, Linear Models, and Trees ビン化のメリット 決定木でビン化するメリットはあまりない 決定木はモデルの中で一つの特徴につ …

no image

SIGNATE お弁当の需要予測-2

データの内容を確認する。 期間を調べる d_train[‘datetime’].min() ‘ ‘2013-11-18’ d_train[‘datetime’].max() ‘ ‘2014-9-9’ …

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

side bar top



アーカイブ

カテゴリー