學習機器學習實戰那本書的第乙個演算法。必須得記錄一下這麼重要的first 哈哈from numpy import *import operator
def createdataset():#給定4組資料
group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])#點的集合
labels=['a','a','b','b']#點標籤
return group,labels
def classify(inx,dataset,labels,k):#knn演算法:4個輸入引數:
datasetsize=dataset.shape[0] #datasetsize是dataset的行數 shape是用來取矩陣維度的長度的函式
diffmat=tile(inx,(datasetsize,1))-dataset
#diffmat得到了目標與訓練陣列的差值
# tile函式是在numpy。lib。shape_base裡的,作用是重複某個陣列
# 比如tile(a,n),功能是將陣列a重複n次,構成乙個新的陣列
# 前面用tile,把一行inx變成4行一模一樣的
# tile有重複的功能,datasetsize是重複4遍,後面的1保證重複完了是4行,而不是一行裡有四個一樣的
# 然後再減去dataset,是為了求兩點的距離,先要座標相減,這個就是座標相減
sqdiffmat=diffmat**2 #元素平方
sqdistances=sqdiffmat.sum(axis=1)#axis=1是列相加,,這樣得到了(x1-x2)^2+(y1-y2)^2
distances=sqdistances**0.5 #開方求距離
sorteddistances=distances.argsort()#公升序排序,將元素按照由小到大的順序返回下標,比如([3,1,2]),它返回的就是([1,2,0]
classcount={}
for i in range(k):#選擇距離最小的k個點
voteilabel=labels[sorteddistances[i]]
classcount[voteilabel]=classcount.get(voteilabel,0)+1
# get是取字典裡的元素
# 如果之前這個voteilabel是有的,那麼就返回字典裡這個voteilabel裡的值
# 如果沒有就返回0(後面寫的),這行**的意思就是算離目標點距離最近的k個點的類別
# 這個點是哪個類別哪個類別就加1
sortedclasscount=sorted(classcount.items(),key=operator.itemgetter(1),reverse=true)
# key=operator.itemgetter(1)的意思是按照字典裡的第乙個排序
# ,要按照第1個(ab是第0個),即『1』『2』排序。
# reverse=true是降序排序
return sortedclasscount[0][0]#返回類別最多的類別
分類 KNN分類演算法之Python實現
knn稱為k最近鄰。對於待分類資料,它先計算出與其最相近的k個的樣本,然後判斷這k個樣本中最多的類標籤,並將待分類資料標記為這個最多的類標籤。python樣例 import numpy as np from sklearn.neighbors import kneighborsclassifier ...
機器學習分類演算法之KNN演算法
knn演算法為按距離進行分類的,對於已知的分類,根據歐式距離,最靠近那個分類就被 為那個分類。本文只是簡單展示一下實現 具體的特徵和分類,還得自己根據實際場景去調整。在開始之前注意看看匯入的包是否都存在,如不存在的化,請先安裝相應的包 coding utf 8 import numpy asnp f...
分類演算法之鄰近演算法 KNN(應用篇)
這次使用的訓練集由sklearn模組提供,關於虹膜 一種鳶尾屬植物 的資料。資料儲存在.data成員中,它是乙個 n samples,n features numpy陣列 print iris.data 5.1 3.5 1.4 0.2 4.9 3.1.4 0.2 它有四個特徵,萼片長度,萼片寬度,花...