この記事の内容
scikit-learnに含まれている基本的な機械学習法の覚え書きです。簡易的な使用法の羅列ですので、ご容赦ください。
- 教師なし学習 (この記事)
- 主成分分析(PCA)
- k-means
- t-SNE
- 教師あり学習 (以下のURLにて)
- 単回帰分析
- 重回帰分析
- ロジスティック回帰 (二値分類)
- ロジスティック回帰 (多値分類)
- ランダムフォレスト法 (分類)
- ランダムフォレスト法 (回帰)
- サポートベクタマシン(SVM)
- K近傍法 (K-NearestNeighbor)(分類)
- K近傍法 (K-NearestNeighbor)(回帰)
データセットのインポート
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
df_iris = pd.DataFrame(data=iris.data,columns=iris.feature_names)
主成分分析 (PCA : Principal Component Analysis)
主成分分析とは、データの特徴量を相互に統計的に関連しないように座標軸を回転する時限削減の手法です。それぞれのデータの分散が最大になるような軸を作成します。
PCA() | 引数 | 説明 |
---|---|---|
n_components | 圧縮後の次元数 | |
copy | デフォルトはTrue | Falseの場合、変換するデータを上書きする |
whiten | デフォルトはFalse | Trueの場合、変数間の相関をなくす処理を行う |
svd_solver | 'auto','full','arpack','randomized' | 特異値分解のソルバ |
random_state | 乱数 |
from sklearn.decomposition import PCA
X = iris.data
y = iris.target
pca = PCA(n_components=3)
pca.fit(X)
X_aft = pca.transform(X)
固有値や寄与率などの算出は下記のリンクをご参考ください。
k-means法
K-means法は、非階層クラスター分析の一つで、複数回サイクルで最適なクラスターを探索します。まず、学習データを空間上にプロットし、各要素を任意のクラスター分だけランダムに振り分けます。クラスター内の重心を求め、その重心周りでクラスターを再定義します。重心の定義とクラスターのメンバーが変わらなくなるまでサイクルを回しクラスターを作成します。
KMeans() | 引数 | 説明 |
---|---|---|
n_clusters | デフォルトは8 | クラスタ数 |
max_iter | デフォルトは300 | 繰り返し回数の最大 |
n_init | デフォルトは10 | 初期の重心を選ぶ処理の実行回数 |
init | 'k-means++','random'(デフォルトは'k-means++') | 初期化の方法 |
tol | デフォルトは0.0001 | 収束判定に用いる許容可能誤差 |
random_state | 乱数 | |
copy_x | デフォルトはTrue | メモリ内でデータを複製してから実行するか |
n_jobs | デフォルトは1 | 並列処理する場合の多重度 |
from sklearn.cluster import KMeans
X = iris.data
y = iris.target
kms = KMeans(n_clusters=3)
print(kms.fit_predict(X))
t-SNE
非線形次元削減法の一つで、特に可視化することに重きをおいた教師なし学習です。データの局所的な構造を捉え、広域なデータ構造も保ったまま解析が可能となっている。
TSNE() | 引数 | 説明 |
---|---|---|
n_components | デフォルトは2 | 削減次元数 |
perplexity | デフォルトは30 | 最近傍の数 |
early_exaggeration | デフォルトは12.0 | 密集度合の設定 |
learning_rate | デフォルトは200.0 | t-SNEの学習率 |
n_iter | デフォルトは1000 | 最適化の最大反復回数 |
random_state | 乱数 | |
n_jobs | デフォルトは1 | 並列処理する場合の多重度 |
from sklearn.manifold import TSNE
X=iris.data
tsne = TSNE(n_components=2,random_state=0)
print(tsne.fit_transform(X).shape)
最後に
今回はscikit-learnに含まれている教師なし学習の使い方についてまとめました。
参考
Andreas C. Muller、Sarah Guido 「Pythonではじめる機械学習」(2017年 株式会社オライリー・ジャパン)