ML:Scikit-Liarn学習ノート(1)---Nearest Neighbors最近隣接総説


Scikit-Liarn学習ノート(1)-Nearest Neighbors最近隣接総説


1はじめに


最近机械の学习の宿题をして、Scilit-Laarnのこのものを使って、私のこの人の功利性が比较的に明らかなため、私にそのドキュメントを见せて本当に気分が悪くて、见たから过ごしました.だから私はまたブログを書いて、今学期何を見ても書く情熱を発揮しました.
このノートは私が作成したい形式は选択した翻訳+理解の形式で、だから本当にノートです

2概要


scikit-learnでは、最近隣接する関連コードがsklearnである.neighborsでは,監督と無監督の近隣学習方法を提供している.機械学習において、監視なしの近隣思想は多くの他のアルゴリズムの重要な基礎であり、特に流行学習(manifold learningリンク1)、およびスペクトルクラスタリング(Spectral Clusteringリンク)であり、監督のある近隣は主に以下の2つの用途がある:離散ラベルの分類、および連続ラベル(値)を持つ回帰.
最近隣接する核心思想は,予測が必要な点(空間的)について,彼と最も近いいくつかの点を見つけ,これらの点のカテゴリに基づいて新しい点を予測することである.これらの点の数は、ユーザがカスタマイズできるため、KNN(K-nearest neighbor learning)、または現在の点の密度に基づいて決定される(半径ベースの近隣radius-based neighbor learning).もう一つの重要な話題は、点と点の距離をどのように測定するかということです.一般的には、ほとんどの方法が可能ですが、一般的には、ユークリッド距離も最もよく使われています(マンハッタンなどもありますよ).最近の隣接思想に基づく関連アルゴリズムは、汎化する必要はありません.彼らは毎回すべてのデータを考慮する必要があるからです.そのため、加速するためには、Ball-TreeやKD-Treeなどの追加のデータ構造を使用して加速します.
最近隣という考えは簡単だと思いますが、実際には彼も乱暴で、最近隣の関連アルゴリズムは多くの分類と回帰問題に適用されています.例えば、私たちがよく見ている手書きデジタル識別、衛星画像分類などです.最近の隣人はパラメータをあまり必要としない方法です(原文は必要ありませんが、non-parametricですが、少なくともいくつかの隣人を指定してもパラメータだと思いますよね?)それは特にいくつかの規則的で規則的な境界のない素具に適している.
scikit-learnではsklearn.Neighborsは、Numpyの配列データ、またはscipyを入力することができる.sparseのデータは,稠密な行列に対して可能な距離行列の山が支持されているが,疎行列に対してはいかなるMinkowski行列も用いることができる.

3監視なしの近隣


NearestNeighborsでは無監督の近隣学習を実現しており、3つの異なる学習アルゴリズム(Ball-Tree,KD-Tree、sklearn.metrics.pairwise.ルールに基づくbrute-force)に統一的なインタフェースを提供しており、どのアルゴリズムを使用してパラメータを設定する必要がある場合にキーワード「algorithm」を「auto」,「ball_tree」,「kd_tree」,「brute」]のいずれかを指定すればよい.もちろん、デフォルト値はautoであり、autoの下で、あなたが与えたテストデータの中から最終的な性能が最も良いアルゴリズムを選択します.アルゴリズムの良し悪しについては、関連する紹介を見ることができます.
最近の隣人が同じ距離を持つ点については、scikit-learnがその順序で選択して使用します.

3.1実戦


ここでは簡単な例を示します.
>>> from sklearn.neighbors import NearestNeighbors
>>> import numpy as np
>>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
>>> nbrs = NearestNeighbors(n_neighbors=2, algorithm='ball_tree').fit(X)
>>> distances, indices = nbrs.kneighbors(X)
>>> indices                                           
array([[0, 1],
       [1, 0],
       [2, 1],
       [3, 4],
       [4, 3],
       [5, 4]]...)
>>> distances
array([[ 0.        ,  1.        ],
       [ 0.        ,  1.        ],
       [ 0.        ,  1.41421356],
       [ 0.        ,  1.        ],
       [ 0.        ,  1.        ],
       [ 0.        ,  1.41421356]])

上の例では、もう一つのキーワード「n_neighbors’はK-NNの中のKの数を指定することができ、上の中で、各点に対して、訓練集中に最も近い点を2つ与え、そのうちの1つはそれ自体であるため、最小は0である.
プログラムでは、接続関係を示すマトリクスに出力することもできます.
>>> nbrs.kneighbors_graph(X).toarray()
array([[ 1.,  1.,  0.,  0.,  0.,  0.],
       [ 1.,  1.,  0.,  0.,  0.,  0.],
       [ 0.,  1.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  1.,  1.,  0.],
       [ 0.,  0.,  0.,  1.,  1.,  0.],
       [ 0.,  0.,  0.,  0.,  1.,  1.]])

また、前述したように、KD-TreeとBall-Treeを使用して近隣を探すこともできます.この場合、次のコードは理解できると思います.
>>> from sklearn.neighbors import KDTree
>>> import numpy as np
>>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
>>> kdt = KDTree(X, leaf_size=30, metric='euclidean')
>>> kdt.query(X, k=2, return_distance=False)          
array([[0, 1],
       [1, 0],
       [2, 1],
       [3, 4],
       [4, 3],
       [5, 4]]...)

ここでKD-TreeとBall-Treeには実際にはオプションのパラメータがたくさんありますので、必要なら公式ドキュメントで確認してください.
今日の内容はここで紹介し,次に近隣のクラスタリング,回帰,解析などに基づく内容を更新する.

ふろく


1、流形学習(manifold learning)総説http://blog.csdn.net/chl033/article/details/61070422、スペクトルクラスタリング(Spectral Clustering)http://www.cnblogs.com/vivounicorn/archive/2012/02/10/2343377.htmlこの文書の公式文書アドレス:http://scikit-learn.org/stable/modules/neighbors.html