機器學習實戰筆記-分類

k-近鄰算法

  • 優點:精度高、對異常值不敏感、無數據輸入假定

  • 缺點:計算複雜性高、空間複雜度高

  • 適用數據範圍:數值型和標稱型
    (標稱型:目標變量的結果只在有限目標集中取值 ,如 真與假;
    數值型:目標變量可以從無限的數值中取值,主要用於迴歸分析。)

  • K-近鄰算法(KNN)工作原理:存在一個樣本數據集合,也稱訓練樣本集,並且樣本集中每個數據都存在標籤,即我們知道樣本數據集每一數據與所屬分類的對應關係。輸入沒有標籤的新數據後,將新數據的每個特徵樣本集數據對應的特徵進行比較然後算出提取樣本集中特徵最相似的分類標籤。一般來說,我們只選擇樣本數據集中前k個最相似的數據,這就是k-近鄰算法中k的出處,通常k是不大於20的整數。最後,選擇k個最相似數據中出現次數最多的分類,作爲新數據的分類。

  • k-近鄰算法的一般流程
    (1)收集數據:可以使用任何方法。
    (2)準備數據:距離計算所需要的數值,最好是結構化的數據格式。
    (3)分析數據:可以使用任何方法
    (4)訓練算法(此步驟不適用於k-近鄰算法)
    (5)測試算法:計算錯誤率
    (6)使用算法:首先需要輸入樣本數據和結構化的輸出結果,然後運行k-近鄰算法判定輸入數據分別屬於哪個分類,最後應用對計算出的分類執行後續的處理。

k-近鄰算法

歐式距離公式
在這裏插入圖片描述

  '''
    numpy.tile的用法參考
    https://blog.csdn.net/xiahei_d/article/details/52749395
    '''
def classify0(inX , dataSet ,labels ,k):

    #  獲取數據集的大小  取的一維數組的大小
    dataSetSize =dataSet.shape[0]
    
	#計算距離  歐式距離格式
   	diffMat = tile( inX ,(dataSetSize,1))-dataSet
    sqDiffMat =diffMat **2
    sqDistances = sqDiffMat.sum( axis =1 )
    distances =sqDistances**0.5
    
    #根據diatances排序 
    #argsort是numpy裏的排序方法
    sortedDistances = distances.argsort()
    classCount ={  }
    
    #選擇距離最小的k個點
    for i in range(k):
    	#標記當前i個的標籤 進行分類
        voteIlabel = labels[sortedDistances[i]]
        classCount[voteIlabel] = classCount.get( voteIlabel,0)+ 1
  	#根據標籤進行分類
    sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
    return sortedClassCount[0][0]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章