KNN

1、knn的原理html

K-近鄰算法採用測量不一樣特徵值之間的距離方法進行分類。python

問題是求某點的最近 K 個點。求兩點間距離公式,此外還可能須要增長權重算法

 

優勢:精度高、對異常值不敏感、無數據輸入假定。網絡

缺點:時間複雜度高、空間複雜度高。學習

一、當樣本不平衡時,好比一個類的樣本容量很大,其餘類的樣本容量很小,輸入一個樣本的時候,K個臨近值中大多數都是大樣本容量的那個類,這時可能就會致使分類錯誤。能夠對K臨近點進行加權,也就是距離近的點的權值大,距離遠的點權值小測試

二、計算量較大,每一個待分類的樣本都要計算它到所有點的距離,根據距離排序才能求得K個臨近點,能夠先對已知樣本點進行剪輯,事先去除對分類做用不大的樣本。編碼

適用數據範圍:數值型和標稱型spa

 

2、python實現knncode

參考連接:https://www.cnblogs.com/lyuzt/p/10471617.htmlhtm

'''
    trainData - 訓練集
    testData - 測試集
    labels - 分類
'''
def knn(trainData, testData, labels, k):
    # 計算訓練樣本的行數
    rowSize = trainData.shape[0]
    # 計算訓練樣本和測試樣本的差值
    diff = np.tile(testData, (rowSize, 1)) - trainData
    # 計算差值的平方和
    sqrDiff = diff ** 2
    sqrDiffSum = sqrDiff.sum(axis=1)
    # 計算距離
    distances = sqrDiffSum ** 0.5
    # 對所得的距離從低到高進行排序
    sortDistance = distances.argsort()
    
    count = {}
    
    for i in range(k):
        vote = labels[sortDistance[i]]
        count[vote] = count.get(vote, 0) + 1
    # 對類別出現的頻數從高到低進行排序
    sortCount = sorted(count.items(), key=operator.itemgetter(1), reverse=True)
    
    # 返回出現頻數最高的類別
    return sortCount[0][0]

python調用

from sklearn.neighbors import KNeighborsClassifier

neigh = KNeighborsClassifier(n_neighbors=3)

#根據數據判別性別
#身高、體重、鞋的尺寸

X = np.array([[181,80,44],[177,70,43],[160,60,38],[154,54,37],

     [166,65,40],[190,90,47],[175,64,39],[177,70,40],

     [159,55,37],[171,75,42],[181,85,43]])

display(X)

y = ['male','male','female','female','male','male','female','female','female','male','male']

# 第1步:訓練數據

neigh.fit(X,y)

# 第2步:預測數據

Z = neigh.predict(np.array([[190,70,43],[168,55,37]]))

display(Z)

 

 

3、監督學習和非監督學習

通俗的說無監督的學習,就是事先不知道類別,自動將類似的對象歸到同一個簇中。監督學習是指數據集的正確輸出已知狀況下的一類學習算法。由於輸入和輸出已知,意味着輸入和輸出之間有一個關係,監督學習算法就是要發現和總結這種「關係」。

監督學習常見算法有:線性迴歸、神經網絡、決策樹、支持向量機、KNN、樸素貝葉斯算法等

無監督學習常見算法有:主成分分析法(PCA)、異常檢測法、自編碼算法等。

相關文章
相關標籤/搜索