K-近隣アルゴリズム(怠惰アルゴリズム)


k—近隣アルゴリズム
プロフィール:
K Nearest NeighborアルゴリズムはまたKNNアルゴリズムと呼ばれ、1つのサンプルが特徴空間におけるk個の最も似たサンプルのうちのほとんどがあるカテゴリに属する場合、このサンプルもこのカテゴリに属する.
このアルゴリズムの考えは:
一つのサンプルは、データセットのk個のサンプルと最も類似しており、このk個のサンプルの多くがあるカテゴリに属する場合、このサンプルもこのカテゴリに属する.すなわち、各テストサンプルに対して、事前に選択された距離計量に基づいて、KNNアルゴリズムはトレーニングセットで最も近い(最も似ている)k個のサンプルを見つける.そして、k個のサンプルのカテゴリの投票結果をテストサンプルのカテゴリとします.
K近隣アルゴリズムアプリの呼び出し
1、sciit_learn 2、api 3、モデルトレーニングは具体的に4、knnアルゴリズムを使って怠惰なアルゴリズムです.与えられたサンプルによって自分で判断します.時間がかかります.
  :	

		#     
		from sklearn.neighbors import KNeihborsClassifier 
		#      
		x = [[0],[1],[2],[3]]
		y = [0,0,1,1]
		#     --    
		#    api
		estimator = KNeighborsClassifier(n_neighbors=2)
		#   fit      
		estimator.fit(x,y)
		
	      :

		1)                     

		2)         

		3)           k  

		4)   k            

		5)   k                     
距離と距離
1、ヨーロッパ式の距離
       ,  ,         
2、マンハッタン距離
       ,      
3、切比雪夫の距離
4、ミンコフスキー距離
             

p = 1 ,       ;

p = 2 ,      ;

p = ∞ ,        。
前の4つの距離の総括:1)各成分の量綱、つまり「単位」を同じ視しました.2)各成分の分布(期待、分散など)は考慮されていないので、不要かもしれません.
5、マルテン距離
            ,      ,     。  :            (   )
6、標準化ユークリッド距離
                        
7、漢明距離
              (  ),【    】
8、ジェカルト距離
              
k値の選択
k値が小さすぎると:異常点の影響を受けやすく、全体モデルが複雑になり、フィッティングが起こりやすいことを意味します.
k値が大きすぎると:サンプルの均衡を受けやすく、k値が大きくなると全体モデルが簡単になり、アンダーフィットが発生しやすくなることを意味します.
k=N(Nはトレーニングサンプルの個数)この時に訓練されたモデルは完全に無効になり、判定されたカテゴリはサンプルの中でサンプルデータが一番多いカテゴリだけを選択します.
個人的な理解:このk値の選択は、k値を以前の特徴として扱うことができ、モデルトレーニングにおいて、特徴が少なすぎると、過当フィットを招き、特徴が多すぎると、不適合を招きます.
kdツリー
目標:訓練データに対して快速k近隣検索を行う.
実現の考え方:
1、ツリーを構築する
1)     

2)           

3)         (  )  
2、最近領域検索
1)      ,             

2)            ,     ,  ,   ,              

3)    ,     
座標系の解釈:対応する近隣点を見つけて、目標点から円を描き、円形内に他のノードがあるかどうかを判断し、ある場合、元は一番近い近隣点に縮小し、前の近隣点の一番近い距離を交替して、円内にノードが存在しないまで、最後の近隣点は一番近いノードである.
追加判例
トビの種類予測
      :

1、     

2、      

	1)     

3、    

4、    

5、    

#     
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier

# 1、     
iris = load_iris()

# 2、      
# x_train,x_test,y_train,y_test       ,      ,      ,     
x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target, test_size=0.2,random_state=22)

# 3、       
transfer = StandardScaler()
x_train = trasfer.fit_transform(x_train)
x_test = transfer.transform(x_test)

# 4、    (    )
estimator = KNeighborsClassifier(n_neighbors=5)
estimator.fit(x_train,y_train)
# 5、    
# 1)         
y_predict = estimator.predict(x_test)
print("     :
",y_predict) print(" :
",y_predict == y_test) # 2) score = estimator.score(x_test, y_test) print(" :
",score)
クロス認証、グリッド検索(モデル選択と最適化)API:
slearn.model_selection.GridSearch CV(estimator、paramugrid=None、cv=None)
  • は、推定器の指定パラメータ値を詳細に検索する
  • .
  • estimator:推定器パラメータ(dict){nyieghbors}
  • cv:何割かのクロス検証を指定します.
  • fit:入力トレーニングデータ
  • score:精度
  • 結果分析:
  • bestscore_:クロス検証において検証された最良の結果
  • beststststimation:最高のパラメータモデル
  • cvresult:各クロス検証後の検証セットの精度結果とトレーニングセットの精度結果
  • トビの花のケースはK値を増加して優れています.
    #   GridSearchCV     
    #     
    from sklearn.datasets import load_iris
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    from sklearn.neighbors import KNeighborsClassifier
    
    # 1、     
    iris = load_iris()
    
    # 2、      
    # x_train,x_test,y_train,y_test       ,      ,      ,     
    x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target, test_size=0.2,random_state=22)
    
    # 3、       
    transfer = StandardScaler()
    x_train = trasfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)
    
    # 4、    (    )
    # 1)KNN     
    estimator = KNeighborsClassifier()
    # 2)       
    param_dict = {"n_neighbors":[1,3,5]} 
    estimator = GridSearchCV(estimaor, param_grid=param_dict, cv=3)
    # 3)fit      
    estimator.fit(x_train,y_train)
    # 5、    
    # 1)         
    y_predict = estimator.predict(x_test)
    print("     :
    ",y_predict) print(" :
    ",y_predict == y_test) # 2) score = estimator.score(x_test, y_test) print(" :
    ",score)