科学の箱

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

モンベルダウンジャケットについて売れ筋商品を分析してみる。

幾何平均が値付けに利用されているという話を聞いたので実際の商品を例にして分析してみる。 調査の目的 適切なダウンジャケットを選ぶことで冬季にあるいは夏季の3000m級の高山で気持ちよく過ご巣ことができ …

no image

Pythonではじめる機械学習 – 多様体学習

多様体学習 次元削減に利用できる手法として主成分分析がある。これは柔軟であり、すぐに実装可能な次元削減アルゴリズムの一つである。しかし一つだけ問題がある。それは主成分分析に適用できるデータは線形のみで …

no image

売り上げデータの分析

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

no image

Core Concept in Data Analysis – Week 4

Contingency Table : 分割表 Nominal : 名目 (カテゴリカル) Taxon : 分類 Marginal : 周辺 Conditional Probability : 条件付 …

no image

線形回帰と最急降下法

線形回帰 世の中の様々な出来事(y)はある事象(x)に対して比例することが多い。もちろん厳密に比例するわけではなくずれは生じる。しかしこのxとyが比例すると仮定した場合、中学校で習った一次式でこの関係 …

2019年9月
月 火 水 木 金 土 日
« 8月   10月 »
 1
2345678
9101112131415
16171819202122
23242526272829
30  

side bar top



アーカイブ

カテゴリー