1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

scikitlearnでよく使うモデルとパラメーター(教師なしモデル)

Posted at

引き続き、教師なしモデルになります。
自分が知っているモデルメインになりますが。。。

1.K近傍法

モデル名 K-Neighbor
目的 クラスタリング
調整すべき主なパラメーター n_neighbors:周囲n個のデータポイントの
       多数決で、あるデータのクラスを
       決定する。
データ標準化が必要か? はい
ハズレ値に対しては 弱い
コマンド sklearn.neighbors.KNeighborsClassifier
特徴(損失関数など) 与えられた学習データをベクトル空間上にプロットしておき、
未知のデータが得られたら、そこから距離が近い順に
任意のn個を取得し、その多数決でデータが属するクラスを
推定する。
利点 アルゴリズムがシンプルで計算量少ない。
欠点 nの数次第で結果が変わる。
単純なアルゴリズムであり、精度は高くない。
sklearnのドキュメント https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html
その他 nを増やしすぎて、データポイント全体の数と等しくなってしまうと、
もはやデータ全体の中で最も数が多いクラスを出力するだけになるので注意
sklearnのドキュメント こちら
その他 coefs_[i]で、i番目のレイヤの回帰係数を取り出せる
intercepts_[i]で、切片(バイアス)項を取り出せる

2.K-Means

モデル名 K-Means
目的 クラスタリング
調整すべき主なパラメーター n_clusters:初期のランダムに生成したクラスタ重心数を何個に設定するか ※default=8
random_state:乱数seedを与えることで生成クラスタの再現性を担保できる
init: k-means++を使いたい場合は、‘k-means++’と指定する。※default=random
(初期のクラスタ重心点をランダムではなく、なるべく互いに離れた位置に設定)
データ標準化が必要か? はい
ハズレ値に対しては 弱い
コマンド sklearn.cluster.Kmeans
特徴(損失関数など) (1)各点xiに対してランダムにクラスタを割り振る
(2)各クラスタに割り当てられた点について重心を計算する
(3)各点について上記で計算された重心からの距離を計算し、
距離が一番近いクラスタに割り当て直す。
(4)2.と3.の工程を、割り当てられるクラスタが変化しなくなるまで行う
利点 アルゴリズムがシンプルで計算量少なく、解釈性が高い。
欠点 初期点をランダムに選択する場合、初期点の選択次第で性能が大幅に変わる。ハズレ値に弱い。
sklearnのドキュメント https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html
その他 こちらがわかりやすい
http://tech.nitoyon.com/ja/blog/2013/11/07/k-means/
sklearnのドキュメント
その他 coefs_[i]で、i番目のレイヤの回帰係数を取り出せる
intercepts_[i]で、切片(バイアス)項を取り出せる

3.X-Means

モデル名 X-Means
目的 クラスタリング
調整すべき主なパラメーター xmeans(data=X_std, initial_centers=xm_c, kmax=20, ccore=True)

data:入力X
initial_centers:初期重心
kmax: 求める重心数の上限
データ標準化が必要か? はい
ハズレ値に対しては 弱い
コマンド from pyclustering.cluster.xmeans import xmeans
from pyclustering.cluster.center_initializer import kmeans_plusplus_initializer
特徴(損失関数など) Kmeansの改良版。
(1)クラスター数Kを自動決定する
(2)k-meansをデータ数が多くても
   高速に動くアルゴリズムに工夫する
という点が、従来のk-meansとの差分。

発見的な方法に拠らずk-meansのおおよそ2倍強の計算量で最適なクラスター数を求めることができる。
利点 最適なクラスタ数を自動決定できる。
欠点 k-meansの欠点(初期値依存性)をひきづっている
sklearnのドキュメント sklearnでは実装されてない
その他 以下にサンプル実装を掲載
#XMeansで、クラスター数Kを自動決定する
#pyclusteringのinstall
!pip install pyclustering

import numpy as np
import matplotlib.pyplot as plt

from pyclustering.cluster.xmeans import xmeans
from pyclustering.cluster.center_initializer import kmeans_plusplus_initializer

xm_c = kmeans_plusplus_initializer(X_std,2).initialize()#クラスター数の初期値を設定
#data=X_std(正規化が済んでいることが前提)
xm_i = xmeans(data=X_std, initial_centers=xm_c, kmax=10, ccore=True)#xmeansによって最適な重心を求める。kmaxでクラスタ数上限をset
xm_i.process()


# 結果をプロット
z_xm = np.ones(X_std.shape[0])
for k in range(len(xm_i._xmeans__clusters)):
    z_xm[xm_i._xmeans__clusters[k]] = k+1



plt.subplot(1, 1, 1)

centers = np.array(xm_i._xmeans__centers)
plt.scatter(centers[:,0],centers[:,1],s=250, marker='*',c='red')
plt.show()
#重心の数
xm_c[0].size

4.PCA

モデル名 PCA
目的 次元削減
調整すべき主なパラメーター n_components:元々のXの次元数を、何次元にまで縮約するか
whiten: True/False 白色化を行うかどうか。Default:false

※白色化については以下参照
https://panda-clip.com/pca-white/#index_id1
データ標準化が必要か? はい
ハズレ値に対しては 弱い
コマンド sklearn.decomposition.PCA
特徴(損失関数など) データの次元を削減するために用いられる。
データをn次元空間にプロットした時、そのデータのばらつきが
最大になるような新しいベクトル(第1主成分)をみつけ、
そのベクトルと直交し、かつデータのばらつきが最大になるような
ベクトル(第2主成分)をみつける。以降、同じ処理を、縮約したい次元数まで繰り返す。
第n主成分上に射影された、元のデータは、元のデータの情報量(この場合、分散)のうちのいくらかを保持している。(累積寄与率)
例えば第1主成分上で、元のデータの分散の8割を保持しているならば、そのデータを1次元に縮約しても大きく情報は失われない。
逆に、多くの主成分を構築しても、元のデータの分散のうち、少ない割合しか保持していないのならば、大きく情報が失われている、ということになる。一般的に、どの次元まで縮約するかは、
第n主成分までで、元のデータの分散をどれだけ含むか?で決める。
利点 ・特徴量Xの次元が大きい場合(画像なども含む)
 特徴量を削減して、計算を軽くできる。
・3次元以下に次元を削減することが出来れば、データを可視化可能
・多数の特徴量があるXを次元削減すれば、
 その次元削減したデータで回帰分析することで、精度が上る可能性
 もある。
欠点 ・次元削減すると、元のデータの各特徴量は失われ、単に「第n主成分上に射影された特徴量」になってしまうので解釈ができない
sklearnのドキュメント https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html
その他 ここがわかりやすい
https://qiita.com/aya_taka/items/4d3996b3f15aa712a54f

5.DBSCAN

モデル名 DBSCAN
目的 クラスタリング
調整すべき主なパラメーター eps:あるデータが、もう一つのデータと
   同じクラスタに属すると判定するための、
   距離。(この距離圏内なら、同じクラスタと判定)
   default=0.5 (float)

min_samples:自データポイントも含め、クラスタを
       構成するためには、eps距離圏内に
       最低何個のデータポイントが必要か?
    default=5(int)
データ標準化が必要か? はい
ハズレ値に対しては クラスターが再帰的に決定されていくため、外れ値(outlier)の影響を受けにくい
コマンド sklearn.cluster.DBSCAN
特徴(損失関数など) k-meansと違って,最初にクラスタ数を決めなくてもクラスターを作成できる。
データポイントの近傍の密度を利用して、所属するクラスタを判断する。

また、k-meansと違い、全てのデータが何らかのクラスタに属するように分けられるのではなく、「ノイズ」と判定されるデータポイントが存在するのが特徴。
利点 ・事前にクラスタ数を指定する必要がない
・クラスタに属さない「ノイズ」データも判定可能
欠点 ・eps/min_samplesの設定に敏感
sklearnのドキュメント https://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html
その他 ここがわかりやすい https://aizine.ai/dbscan-0712/
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?