算法原理
k近鄰(k-NearestNeighbor,kNN),應該是最簡單的傳統(tǒng)機器學習模型,給定一個訓練數(shù)據(jù)集,對新的輸入實例,在訓練數(shù)據(jù)集中找到與該實例最鄰近的k個實例,這k個實例中的大多數(shù)屬于哪個類別,就把該輸入實例劃分到這個類別。
k近鄰算法沒有顯示的訓練過程,在“訓練階段”僅僅是把樣本保存起來,訓練時間開銷為零,待收到測試樣本后在進行計算處理。
這個k實際上是一個超參數(shù),k值的選擇會對k近鄰法的結(jié)果產(chǎn)生重大影響。如果選擇較小的k值,意味著只有與輸入實例較近的(相似的)訓練實例才會對預測結(jié)果起作用,預測結(jié)果會對近鄰的實例點非常敏感,如果近鄰的實例點恰巧是噪聲點,預測就會出錯;如果選擇較大的k值,就意味著與輸入實例較遠的(不相似的)訓練實例也會對預測起作用,這樣預測也會出錯。在實際應用中,k值一般取一個比較小的數(shù)值,并且通常采用交叉驗證法來選取最優(yōu)的k值。如上圖的k=5。
模型訓練代碼地址:https://github.com/qianshuang/ml-exp
deftrain():
print("starttraining...")
#處理訓練數(shù)據(jù)
train_feature,train_target=process_file(train_dir,word_to_id,cat_to_id)
#模型訓練
model.fit(train_feature,train_target)
deftest():
print("starttesting...")
#處理測試數(shù)據(jù)
test_feature,test_target=process_file(test_dir,word_to_id,cat_to_id)
#test_predict=model.predict(test_feature)#返回預測類別
test_predict_proba=model.predict_proba(test_feature)#返回屬于各個類別的概率
test_predict=np.argmax(test_predict_proba,1)#返回概率最大的類別標簽
#accuracy
true_false=(test_predict==test_target)
accuracy=np.count_nonzero(true_false)/float(len(test_target))
print()
print("accuracyis%f"%accuracy)
#precisionrecallf1-score
print()
print(metrics.classification_report(test_target,test_predict,target_names=categories))
#混淆矩陣
print("ConfusionMatrix...")
print(metrics.confusion_matrix(test_target,test_predict))
ifnotos.path.exists(vocab_dir):
#構(gòu)建詞典表
build_vocab(train_dir,vocab_dir)
categories,cat_to_id=read_category()
words,word_to_id=read_vocab(vocab_dir)
#kNN
model=neighbors.KNeighborsClassifier()
train()
test()運行結(jié)果:
read_category...
read_vocab...
starttraining...
starttesting...
accuracyis0.820000
precisionrecallf1-scoresupport
時政0.650.850.7494
財經(jīng)0.810.940.87115
科技0.960.970.9694
游戲0.990.740.85104
娛樂0.990.750.8589
時尚0.880.670.7691
家居0.440.780.5689
房產(chǎn)0.930.820.87104
體育1.000.980.99116
教育0.960.650.78104
avg/total0.870.820.831000
ConfusionMatrix...
[[80400006301]
[110800006000]
[00910003000]
[401770318001]
[430167410000]
[000016129000]
[95200069301]
[93000078500]
[200000001140]
[14101001100068]]
社群:
公眾號:
了解更多干貨文章,可以關(guān)注小程序八斗問答
---------------------
作者:gaoyan0335
來源:CSDN
原文:https://blog.csdn.net/gaoyan0335/article/details/86299367
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!