コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

利用者:波夛みん

1. データを収集する

2. データを理解する及びデータの前処理(特徴量のスケーリング)

※各次元の関係を分かりやすくするため

※引数が2つ(x, axis): # e.g. zscore(x, axis = None):

<2-1> z-score normalization(標準化・正規化法) # ワインデータの分類精度の貢献

from sklearn.preprocessing import standardscaler

0: 平均

1: 分散(標準偏差)

分散スケーリング

基本は標準化が多い

min-maxが決まってない、若しくは外れ値が存在

<2-2> min-max normalization(正規化) # 乳癌悪性予測 from sklearn.preprocessing import MinMaxScaler

必須ではないが、予測精度を高めることができる

0: min

1: MAX # 0-1スケーリング手法

Min-Maxスケーリング # MinMaxScaler().fit

外れ値が大きく影響してしまう

画像処理など良く用いられる

(データクレンジングとも呼ばれ、データの重複やあるべきデータがない欠損データなどを取り除いてデータの精度を高めること。)

3. 特徴量、教師データの設計(評価方法・評価指標)

<3-1> hold-out validation(ホールドアウト法) # 乳癌悪性予測 # 住宅価格予測

from sklearn.model_selection import train_test_split

全部学習してしまうと過学習、未知データできなくなる

train_test_split(説明変数, 目的変数, test_size=0.25, random_state=0)

random_stateは種(seed)=疑似的な乱数

X_train, X_test, y_train, y_test = train_test_split(data, target, train_sizes=0.8, test_size=0.2) <3-2> cross-validation(交差検証)

汎化性能を測定する方法

k-fold cross validation(k-分割交差検証) from sklearn.model_selection import cross_val_score, KFold

引数が4つ(clf, 説明変数, 目的変数, 分割する数):

clf = 機械学習アルゴリズム(決定木、SVM)

e.g. evaluate_cross_validation(clf, x, y, K=5)

cross_val_score()ではfit()predict()も不要(分割、学習、検証が含まれる)

leave-one-out cross-validation(一つ抜き交差検証)

from sklearn.model_selection import LeaveOneOut

stratified k-fold cross-validation(層化k分割交差検証)

from sklearn.model_selection import StratifiedKFold

shuffle-split cross-validation(シャッフル分割交差検証)

from sklearn.model_selection import ShuffleSplit

<3-3> grid search(グリッドサーチ) # 乳癌悪性予測

from sklearn.model_selection import GridSearchCV

from sklearn import svm

svc = svm.SVC()

clf = GridSearchCV(svc, parameters)

clf.fit(X_train_norm, y_train)

clf.best_params_

hyperparameter探索

↑調整して汎化性能を向上させる方法を探す代表的な手法

もっとも良い精度を示したparameterを採用

引数3つ(svc, C, gamma): # SVCでのkernelのバンド幅gammaと正則化C

n通り組み合わせの中、一番良いものを採択

e.g. clf = GridSearchCV(svc, parameters)

parameters = [     {‘C’: [1, 5, 10, 50, 100, 150, 200],      ‘gamma’: [0.1, 0.001, 0.0001, 0.0001]} ]

↑ 28通り

4. 機械学習アルゴリズムの選択と学習(機械学習)

<4.1> SVM(サポートベクターマシン) # 乳癌悪性予測(分類)

model = svm.SVC() # モデルの指定

model.fit(X_train_norm, y_train) # 学習

predict = model.predict(X_test_norm) # 予測

<4.1.1>

clf = svm.SVC(C=50, gamma=0.1)

clf.fit(X_train_norm, y_train)

predict = clf.predict(X_test_norm)

<4.2> LinearRegression # 住宅価格予測(回帰)

from sklearn.linear_model import LogisticRegression

model = LinearRegression()

model = LinearRegression(verbose=True)
model = LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)

model.fit(x, y)

price = model.predict(25)

model.fit(X_train, y_train)

price = model.predict(X_test)

5. テストデータを使った性能評価

from sklearn.metrics import confusion_matrix, accuracy_score, precision_score, recall_score, f1_score, classification_report

Classification

<5.1> confusion_matrix(混同行列) # 乳癌悪性予測 # 併せて確認

cmatrix = confusion_matrix(y_test, pred)

TN(真陰性) 0/0 FP(偽陽性) 0/1 FN(偽陰性) 1/0 TP(真陽性) 1/1

<5.2> accuracy_score(正解率) accuracy_score(y_test, pred)

(TN+TP)/(TN+TP+FN+FP)

<5.3> precision_score(適合率) # FN(偽陰)が許容

TP/(TP+FP)

<5.4> recall_score(再現率) # 乳癌悪性予測 # FP(偽陽)が許容 recall_score(y_test, pred)

TP/(TP+FN) 癌のパターンFPが許容

<5.5> f1_score(F値)

2PR/(P+R)

<5.6> classification_report

Regression

from sklearn.metrics import mean_squared_error, r2_score

import numpy as np

from math import sqrt

<5.7> mean_squared_error(MSE: 平均二乗誤差)

mean_squared_error(y_test, pred1)

<5.8> sqrt(mean_squared_error)(RMSE: 二乗平均平方根誤差) # 住宅価格予測

np.sqrt(mean_squared_error(y_test, pred1))

sqrt(mean_squared_error(y_test, pred1))

<5.9> r2_score(決定係数・寄与率) # 住宅価格予測

r2_score(y_test, pred1)

6. ハイパーパラメーターチューニング

<3-3> grid search(グリッドサーチ)

7. サービスに組み込む

11. Classification(分類)

教師あり

<11.1> ロジスティック回帰

<11.2> 決定木(Decision Trees)

12. Regression(回帰)

教師あり

1. 線形(LinearRegression)、リッジ(RidgeRegression)

2. ラッソ(Lasso)

13. Clustering(クラスタリング)

教師なし

データの中で似たものの集まりを見つける手法

ラベルがないデータに対していくつかのグループ(クラスタ)に分ける

顧客のセグメント化やレコメンド、遺伝子の発見

<13.1> KMeans

実行速度が速く拡張性がある

K = クラスタの数を示すハイパーパラメータ # 必ずデータの数より小さい

真のクラスタが傾いた楕円形のクラスタや、多様体上の非線形なクラスタに上手くできない

複雑な形に分布しているデータは<14.2>t-SNE

<13.2> 混合ガウスモデル 14. Dimensionality reduction(次元削減)

教師なし

<14-1> PCA

<14-2> t-SNE

— API —

[編集]

load_digits() # Classification

load_iris() # Classification # svm.LinearSVC() # KNeighborsClassifier(n_neighbors=1) # RandomForestClassifier()

load_boston() # <3-1> <4-2> <5-8> <5-9>

load_breast_cancer() # <3-1> <2-2> <4-1> <5-1> <5-4> <3-3>

load_wine() # <2-1>

load_diabetes()

load_linnerud()

fetch_lfw_people(min_faces_per_person=20,resize=0.7) # <13.1>