科学の箱

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

多変量解析

多変量解析の分類 回帰分析 ロジスティック分析 判別分析 主成分分析 因子分析 共分散 クラスタリング 共分散 Sxy = Σ(Xi – X~)(Yi – Y~) / n 共分 …

no image

logistic regressionでの失敗

ロジスティック回帰でデータを分析しようとしたところうまくいかず。どうにもこうにもおかしな値が出るし、他の回帰分析との結果と明らか矛盾している。よくわからないのでとりあえずirisデータを使って手順を追 …

no image

スピアマンの順位相関

スピアマンの順位相関を利用して県のデータを使った相関係数を出してみる。 持家普及率を自動車普及率のランキングは、土地がせまいほど低く、有効な土地が広いほど高くなるために順位相関があると考えられる。 持 …

no image

DictVectorizerを使ってカテゴリデータについて特徴抽出をする

都市における温度データを考える。 measure = [ {‘city’: ‘Dubai’, ‘temperature’: 33.}, {‘city’: ‘London’, ‘temperature’ …

no image

売り上げデータの分析

利益 = 売り上げ – コスト 売り上げ = 客数 x 客単価 コスト ≒ 人件費 + 廃棄コスト 客数 客単価 = Σ 品物i x 購入数 客数を増やす方法 来てもらう方法 安売りキャン …

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

side bar top



アーカイブ

カテゴリー