scikit-learnで機械学習プログラムを記述するとき、関数名や引数の意味などをよく忘れるので、メモ用に残しました。
1. データの整理
1.1 データの変数名
| 変数名 | 変数の意味 | 
|---|---|
| x_train | 学習データの特徴量 | 
| y_train | 学習データの正解ラベル | 
| x_test | テストデータの特徴量 | 
| y_test | テストデータの正解ラベル | 
1.2 学習データとテストデータの分割
CrossValidation.py
from sklearn.cross_validation import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=149)
- 引数
| 引数 | 引数の意味 | 
|---|---|
| x | データの特徴量 | 
| y | データの正解ラベル | 
| test_size | 分割後のテストデータの割合 | 
| random_state | 乱数のシード | 
1.3 データの標準化
Standard.py
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit(x_train)
x_train_standard = sc.transform(x_train)
x_test_standard = sc.transform(x_test)
- データの標準化を行うとデータの特徴量が以下のように変更になる。
- データの各特徴量の平均値μ=0
- データの各特徴量の標準偏差σ=1
 
1.4 主成分分析
PCA.py
from sklearn.decomposition import PCA
pca = PCA(n_components=3)
x_train_pca = pca.fit_transform(x_train_standard)
x_test_pca = pca.transform(x_test_standard)
- 
主成分分析とは - データの特徴を捉えつつ、特徴量の次元を圧縮する
 
- 
引数 (PCA) 
| 引数 | 引数の意味 | 
|---|---|
| n_components | 圧縮後の特徴量の次元 | 
2. 分類手法
- サポートベクターマシン(SVM)
- ロジスティック回帰
- ランダムフォレスト
- k近傍法
2.1 サポートベクターマシン(SVM)
SVM.py
from sklearn.svm import SVC
svm = SVC(kernel='linear', C=1.0, random_state=149)
svm.fit(x_train, y_train)
score = svm.score(x_test, y_test)
print('正答率: {}' .format(score))
- 引数(SVC)
| 引数 | デフォルト値 | 引数の意味 | 
|---|---|---|
| kernel | 'rbf' | カーネルの種類の指定 | 
| C | 1.0 | 正則化の割合を指定。Cの値が小さいほど正則化の割合が強い。 | 
| random_state | None | 乱数のシードの指定 | 
- kernelの種類
| 引数 | 引数の意味 | 
|---|---|
| 'rbf' | RBF(Gauss)カーネル | 
| 'linear' | 線形カーネル | 
| 'poly' | 多項式カーネル | 
| 'sigmoid' | シグモイドカーネル | 
2.2 ロジスティック回帰
LogisticRegression.py
from sklearn.linear_model import LogisticRegression
logistic_regression = LogisticRegression(penalty='l2', C=100, random_state=149)
logistic_regression.fit(x_train, y_train)
score = lr.score(x_test, y_test)
print('正答率: {}' .format(score))
- 引数
| 引数 | デフォルト値 | 引数の意味 | 
|---|---|---|
| penalty | 'l2' | 正則化の種類の指定('l1':L1正則化, 'l2':L2正則化) | 
| C | 1.0 | 正則化の割合を指定。Cの値が小さいほど正則化の割合が強い。 | 
| random_state | None | 乱数のシードの指定 | 
2.3 ランダムフォレスト
RandomForest.py
from sklearn.tree import DecisionTreeClassifier
random_forest = DecisionTreeClassifier(criterion='entropy', max_depth=3, random_state=149)
random_forest.fit(x_train, y_train)
score = random_forest.score(x_test, y_test)
print('正答率: {}' .format(score))
- 引数
| 引数 | デフォルト値 | 引数の意味 | 
|---|---|---|
| criterion | 'gini' | 不純度の指定('gini':ジニ係数, 'entropy':エントロピー) | 
| max_depth | None | 木の深さの値を指定 | 
| random_state | None | 乱数のシードの指定 | 
2.4 K-NearestNeighbor(K近傍法)
KNN.py
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=5, p=2, metric='minkowski')
knn.fit(x_train, y_train)
score = knn.score(x_test, y_test)
print('正答率: {}' .format(score))
- 引数
| 引数 | デフォルト値 | 引数の意味 | 
|---|---|---|
| n_neighbors | 5 | 参照する付近のデータ数 | 
| p | 2 | 1:マンハッタン距離 2:ユークリッド距離 | 
| metric | 'minkowski' | ユークリッド距離やマンハッタン距離を一般化した式 | 
- minkowskiの式(p=1:マンハッタン距離, p=2:ユークリッド距離)
d(x^{i}, x^{j}) = \sqrt[p]{\sum_{k}\bigl|x_k^i - x_k^j\bigr|^{p}}
