①.計算機將計算所有的點和該點的距離
②.選出最近的k個點
③.比較在選擇的幾個點中那個類的個數多就將該點分到那個類中
knn演算法的優點:精度高,對異常值不敏感,無資料假設
knn演算法的缺點:時間複雜度和空間複雜度都比較高
1、當樣本不平衡時,比如乙個類的樣本容量很大,其他類的樣本容量很小,輸入乙個樣本的時候,k個臨近值中大多數都是大樣本容量的那個類,這時可能就會導致分類錯誤。改進方法是對k臨近點進行加權,也就是距離近的點的權值大,距離遠的點權值小。
2、計算量較大,每個待分類的樣本都要計算它到全部點的距離,根據距離排序才能求得k個臨近點,改進方法是:先對已知樣本點進行剪輯,事先去除對分類作用不大的樣本。
注意:資料是二維的,第一維表示樣本,第二維表示特徵(如手寫數字演算法,)
標稱型:標稱型目標變數的結果只在有限目標集中取值,如真與假(標稱型目標變數主要用於分類)
數值型:數值型目標變數則可以從無限的數值集合中取值,如0.100,42.001等 (數值型目標變數主要用於回歸分析)
案例:import numpy as np
import pandas as pd
# kneighborsclassifer 用於分類問題的處理
from sklearn.neighbors import kneighborsclassifier
# 匯入資料:
#根據電影的武打鏡頭和接吻鏡頭的數量判斷電影的型別
#knn演算法是有監督學習,需要樣本訓練資料,和目標值進行對照
提取資料:
x = movie.iloc[:,1:3]
y = movie["分類情況"]
# 此時k值等於5,即5個鄰居
knn=kneighborsclassifier(n_neighbors=5)
# 訓練演算法:fit()
以x為訓練資料,y為目標值擬合模型
knn.fit(x,y)
#資料進行l訓練,已經建立了乙個分類標準
#新增2個樣本資料
x_text = pd.dataframe()
# 使用演算法**目標樣本的分類情況
knn.predict(x_text)
**結果:
array(['動作片', '愛情片'], dtype=object)
#從結果可以看出:第乙個樣本被劃分到動作片中,第二個樣本被劃分到愛情片中
#對樣本進行估計被劃分到哪個類的概率
knn.predict_proba(x_text)
估計結果結果:array([[0.6, 0.4], [0.4, 0.6]])
注意:knn演算法是根據距離遠近進行分類的劃分,k為最近的樣本。
給knn加權重,即weight = ["uniform","distance","calllable"] 即:均衡、距離、自定義
如:knn=kneighborsclassifier(n_neighbors=5,weights="distance")
當我們對演算法進行了訓練之後,想要再次使用該演算法進行**時,就不需要再次進行演算法的訓練了,直接使用儲存的演算法,對需要進行分類的樣本進行分類就行
#演算法儲存
#應用模組
from sklearn.externals import joblib
#儲存樣本的方式:
joblib.dump(knn,filename = "./digit_detector.m")
#filename後邊自定義字尾為m的檔名
#演算法的載入
from sklearn.externals import joblib
#載入之前儲存的演算法
knn = joblib.load("./digit_detector.m")
機器學習之KNN演算法
在幾位志同道合的小夥伴的帶領下,開始了機器學習的路程,然而一切並不是想象的那麼簡單,因此本文記錄了自己的學習路程,希望還能堅持做好這件事。knn演算法是機器學習中屬於比較簡單的演算法,容易理解和閱讀。1.knn的應用 客戶流失 欺詐偵測等 更適合於稀有事件的分類問題 2.優缺點 優點 這是乙個簡單有...
機器學習演算法之KNN
物以類聚 人以群分,乙個例項與它周圍的例項屬於同一類的概率較大。給定乙個訓練資料集,對新輸入的例項,在訓練資料集中找到與該例項最鄰近的k個例項,這k個例項的多數屬於某個類,就把該輸入例項分為這個類。這裡,選用了歐氏距離,k的預設值為3,使用了sklearn提供的digits資料集來進行測試。inpu...
機器學習之kNN演算法
knn原理及實踐 1 演算法介紹 總的來說,機器學習入門的第乙個演算法是k 近鄰演算法 knn 它的工作原理是 存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進...