【總體】 分類演算法:
有目標值,離散型
乙個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。
k:(本身取值對演算法有影響,又不能通過演算法訓練確定值的變數叫做超引數)
距離:scikit-learn:
機器學習工具
k近鄰的sklearn的實現:
sklearn.neighbors.kneighborsclassifier(n_neighbors=5)
.fit(x,y) # 訓練資料集的特徵值和目標值
.predict(x) # 需要**的而資料集合的特徵值
距離度量的幾個方式:
1 歐式距離(euclidean distance):
2 曼哈頓距離(manhattan distance):
3 切比雪夫距離 (chebyshev distance):
4 閔可夫斯基距離(minkowski distance):
前四個距離公式小結:前面四個距離公式都是把單位相同看待了,所以計算過程不是很科學
k值過小:
容易受到異常點的影響 容易過擬合
k值過大:
受到樣本均衡的問題 容易欠擬合
超引數:例如,這裡的k值,對演算法有影響,但又不能直接通過演算法訓練得到的值
fit 儲存所有訓練資料
predict 步驟:
1 計算距離 2 排序 3 距離最小的前k個 4 **類別
kd樹,針對尋找topk問題的優化
本質是二叉樹,通過二分法對特徵空間進行劃分,同時生成一顆二叉樹
最近領域的搜尋:
在回溯過程中,需要用到乙個佇列,儲存需要回溯的點,在判斷其他子節點空間中是否有可能有距離查詢點更近的資料點時,做法是以查詢點為圓心,以當前的最近距離為半徑畫圓,這個圓稱為候選超球(candidate hypersphere),如果圓與回溯點的軸相交,則需要將軸另一邊的節點都放到回溯佇列裡面來
api:
sklearn.neighbors.kneighborsclassifier(n_neighbors=5,algorithm=『auto』)
algorithm:
獲取資料
基本資料處理
特徵工程
對資料集進行劃分(訓練資料集和測試資料集)
找合適的演算法進行訓練
**
評估
sklearn.datasets
load_*
fetch_*
iris = load_iris()
iris.data # 特徵值 ndarray 2d
.target # 目標值 ndarray 1d
.feature_names # 特徵值的名字
.target_names # 目標值的說明
.descr # 資料描述
資料集的劃分 預設 訓練集75% 測試集25%
sklearn.model_selection.train_test_split(arrays, *options)
x_train, x_test, y_train, y_test = train_test_split(x, y)
test_size=
train_size=
特徵預處理
量綱單位
數量級不一致(相差太大)
計算精度不容易達到,容易溢位
0.01
里程數 * k1 + 公升數 * k2 + 消耗時間比 * k3
1.3 特徵預處理api
sklearn.preprocessing
(x - x.min())/(x.max() - x.min()) * (mx - mi) + mi
歸一化:
sklearn.preprocessing.minmaxscaler(feature_range=(0,1)… )
.fit_transform(2darray) # .fit .transform
.fit(2darray) # 計算後需要轉換的時候需要用的引數
.transform(2darray) # 拿著引數對資料進行轉換
robust(魯棒性) 穩定性,穩健性
最大值與最小值非常容易受異常點影響,不robust
精確小資料場景
標準化:(以後用這個)
x』 = (x - mean)/std
std = sqrt
std/std = sqrt/std
1 = sqrt
1 = sqrt
1 = sqrt
1 = sqrt
1 = sqrt
sklearn.preprocessing.standardscaler(
).fit_transform(x)
.fit(x)
# mean std
.transform(x)
# (x-mean)/std
# 3、特徵工程:標準化
transfer = standardscaler(
)x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 細節:注意點 這裡 x_train 與 x_test 來自於同乙個資料集,因此,咱們只需要fit 一次,保證裡面資料的 std 與 mean 一致
優點:
簡單有效
重新訓練的代價低
適合類域交叉樣本[ 像svm,就不太好區分,主要是 一堆紅色,一堆黃色,某處又一堆紅色,又一堆黃色,這樣svm難區分,而我們的knn則容易,因為knn方法主要靠周圍有限的鄰近的樣本,而不是靠判別類域(即有多少種的分類)的方法來確定所屬類別的,因此對於類域的交叉或重疊較多的待分樣本集來說,knn方法較其他方法更為適合。]
適合大樣本自動分類 [只要咱們的記憶體能夠吃得消,就可以]
缺點: 惰性學習
類別評分不是規格化
輸出可解釋性不強(因為具體的按某一舉例評判,咱們是不知道距離的,距離判斷的好壞咱也不太清楚)
對不均衡的樣本不擅長 (例如:二分類 乙個類別有乙個資料,另外乙個樣本含有99個資料,這樣的問題咱們knn去分類則不太容易)
計算量較大【目前常用的解決方法是事先對已知樣本點進行剪輯,事先去除對分類作用不大的樣本】
K近鄰 KNN 演算法總結
knn演算法是選擇與輸入樣本在特徵空間內最近鄰的k個訓練樣本並根據一定的決策規則給出輸出結果。決策規則 分類任務 輸出結果為k個訓練樣本中佔大多數的類。回歸任務 輸出結果為k個訓練樣本值的平均值。如下圖的分類任務,輸出結果為w1類。k值的選擇 距離度量和分類決策規則是k近鄰演算法的三個基本要素。分類...
KNN演算法總結 python實現
k最近鄰 knn,k nearestneighbor 分類演算法 所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。用的是近朱者赤近墨者黑的思想。knn沒有顯式的學習過程,也就是說沒有訓練階段,資料集事先已有了分類和特徵值,待收到新樣本後直接進行處理。思路是 如...
手推演算法 KNN總結
k近鄰演算法,即k nearest neighbor algorithm,簡稱knn演算法,可以根據字面意思理解為 k個最近的鄰居。因為k近鄰是分類演算法,找到最近的鄰居就能知道自己所在的類別。k近鄰用於解決分類問題。因為需要計算特徵之間的距離,所以需要將資料集中的特徵資料變成數值型和標稱型。1.計...