在幾位志同道合的小夥伴的帶領下,開始了機器學習的路程,然而一切並不是想象的那麼簡單,因此本文記錄了自己的學習路程,希望還能堅持做好這件事。
knn演算法是機器學習中屬於比較簡單的演算法,容易理解和閱讀。
1.knn的應用
客戶流失**、欺詐偵測等(更適合於稀有事件的分類問題)
2.優缺點
- 優點:這是乙個簡單有效的演算法,易於理解,易於實現;
- 缺點:必須儲存全部資料集,如果訓練集過大,消耗大量的儲存空間,對每個資料計算距離值,實際使用很耗時。
3.距離計算方式
-歐式距離
-夾角余弦(適合文字分析)
-曼哈頓距離
-切比雪夫距離
4.演算法實現
對未知類別屬性的資料集中的每個點依次執行以下操作:
(1)計算已知類別資料集中的點與當前點之間的距離;
(2)按照距離遞增次序排序;
(3)選取與當前點距離最小的走個點;
(4)確定前灸個點所在類別的出現頻率;
(5)返回前女個點出現頻率最高的類別作為當前點的**分類。
乙個簡單的例子,用python語言實現knn演算法,資料與後面將要寫的其他演算法使用一樣的資料。
訓練資料
tid house marriage income borrower
1 yes single 125
k no
2 no married 100
k no
3 no single 70
k no
4 yes married 120
k no
5 no divorced 95
k yes
6 no married 60
k no
7 yes divorced 220
k no
8 no single 85
k yes
9 no married 75
k no
10 no single 90
k yes
測試資料
tid house marriage income
test no married 120
k
準備資料
def
loaddataset_train
(path_read):
df = pd.read_csv(path_read, sep='\t', header=0, dtype=str, na_filter=false)
group = np.array(np.matrix(df[['house','marriage','income']]))
label = np.array(np.matrix(df["borrower"]))
y = np.zeros(group.shape)
y[group=='yes']=1
y[group=='married']=1
y[group=='divorced']=2
for i in group[:,2]:
y[group==i]=i[0:-1]
#print(i[0:-1])
labels=['no', 'no', 'no', 'no', 'yes', 'no', 'no', 'yes', 'no', 'yes']
return y,labels
defloaddataset_test
(path):
df = pd.read_csv(path, sep='\t', header=0, dtype=str, na_filter=false)
group = np.array(np.matrix(df[['house','marriage','income']]))
return group
資料分類,參考機器學習**
def
classify
(inx,dataset,label,k):
datasetsize = dataset.shape[0]
diffmat = np.tile(inx, (datasetsize,1)) - dataset
sqdiffmat = diffmat ** 2
sqdistance = sqdiffmat.sum(axis=1)
distance = sqdistance ** 0.5
sorteddistindicies = distance.argsort()
classcount={}
for i in range(k):
voteilabel = label[sorteddistindicies[i]]
classcount[voteilabel] = classcount.get(voteilabel,0) + 1
sortedclasscount = sorted(classcount.iteritems(), key=operator.itemgetter(1), reverse=true)
return sortedclasscount[0][0]
選取不同的k值發現對結果的影響還是很大的,訓練資料畢竟很少。這只是方便理解演算法,簡單的實現,後面還會繼續學習機器學習其他的演算法,**嘗試著自己寫一寫,之前沒使用過python語言,也對機器學習了解甚少,只在研究生階段開始學習,**以及其他地方不及之處,希望大家多多交流。 機器學習演算法之KNN
物以類聚 人以群分,乙個例項與它周圍的例項屬於同一類的概率較大。給定乙個訓練資料集,對新輸入的例項,在訓練資料集中找到與該例項最鄰近的k個例項,這k個例項的多數屬於某個類,就把該輸入例項分為這個類。這裡,選用了歐氏距離,k的預設值為3,使用了sklearn提供的digits資料集來進行測試。inpu...
機器學習之kNN演算法
knn原理及實踐 1 演算法介紹 總的來說,機器學習入門的第乙個演算法是k 近鄰演算法 knn 它的工作原理是 存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進...
機器學習之KNN演算法
如果乙個樣本在特徵空間中的k個最相似 即特徵空間中最鄰近 的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。knn是一種非常古老而且簡單的分類方法 a a1,a2,a3 b b1,b2,b3 兩點的歐式距離是 因為計算的特徵值的平方,所以計算前需要先進行特徵處理 sklearn.neighbo...