import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from math import sqrt
from collections import counter
class
knnclassfier
:def
__init__
(self,k)
:'''初始化knn分類器'''
assert k>=1,
"k must be valid"
self.k=k
self._x_train=
none
self._y_train=
none
deffit
(self,x_train,y_train)
:'''根據訓練資料集x_train和y_train訓練knn分類器'''
assert x_train.shape[0]
==y_train.shape[0]
,\ "the size of x_train must be equal to the size of train"
assert self.k<=x_train.shape[0]
,\ "the size of x_train must be at least l."
self._x_train=x_train
self._y_train=y_train
return self
defpredict
(self,x_predict)
:'''給定帶**資料集x)predict,返回表示x_predict的結果向量'''
assert self._x_train is
notnone
and self._y_train is
notnone
,\ "must fit before predict"
assert x_predict.shape[1]
==self._x_train.shape[1]
,\ "the feature number of x_predict must be equal to x_train"
y_predict=
[self._predict(x)
for x in x_predict]
return np.array(y_predict)
def_predict
(self,x)
:'''給定單個帶**資料x,返回x的**結果值'''
assert x.shape[0]
==self._x_train.shape[1]
, \ "must feature number of x must be equal to x_train"
distances=
[sqrt(np.
sum(
(x_train-x)**2
))for x_train in self._x_train]
nearest=np.argsort(distances)
topk_y=
[self._y_train[i]
for i in nearest[
:self.k]
] votes=counter(topk_y)
return votes.most_common(1)
[0][
0]defscore
(self,x_test,y_test)
:'''根據測試資料集x_test和y_test確定當前模型的準確度'''
y_predict=self.predict(x_test)
return accuracy_score(y_test,y_predict)
def__repr__
(self)
:return
"knn(k=%d"
%self.k
defaccuracy_score
(y_true,y_predict)
:'''計算y_true和y_predict之間的準確率'''
assert y_true.shape[0]
==y_predict.shape[0]
,\ "the size of y_true must be equal to the size of y_predict"
return
sum(y_true==y_predict)
/len
(y_true)
digits=datasets.load_digits(
)print
(digits.keys())
print
(digits.descr)
x=digits.data
print
(x.shape)
y=digits.target
print
(y.shape)
some_digit=x[
666]
some_digit_image=some_digit.reshape(8,
8)plt.imshow(some_digit_image)
plt.show(
)from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=
0.2)
my_knn_clf=knnclassfier(k=3)
my_knn_clf.fit(x_train,y_train)
y_predict=my_knn_clf.predict(x_test)
print
(sum
(y_predict==y_test)
/len
(y_test)
)'''第二種方法'''
from sklearn.neighbors import kneighborsclassifier
knn_clf=kneighborsclassifier(n_neighbors=3)
knn_clf.fit(x_train,y_train)
y_predict=my_knn_clf.score(x_test,y_test)
print
(y_predict)
機器學習 準確率 召回率 精確率 f1score等
機器學習中,如何評估乙個模型的好壞極關重要,否則訓練出來了我們自己都說不明白到底該不該用,一句話就是心裡沒底。本文將用較為白話的角度來闡述這些指標。注 這些指標 準確率 精確率 召回率 用中文表示容易混淆,例如準確率和精確率,本文將用英文來進行表述 在介紹之前,我們先上乙個二分類的例子 假定已經根據...
如何提高機器學習中的分類準確率
1.擴大資料集。俗話說的好,更好的資料往往能打敗更好的演算法。當我們想要提高機器學習的分類準確率時,第乙個可用的方法就是擴大資料集。只要機器學習花費的時間在可以接受的範圍內,就可以繼續擴大資料集,它往往可以使我們獲得更理想的分類準確率。2.分類器選擇。遺憾的是,理想的資料集規模往往是我們可望不可即的...
學習筆記 準確率和召回率等
召回率和準確率是資料探勘中 網際網路中的搜尋引擎等經常涉及的兩個概念和指標。召回率 recall,又稱 查全率 還是查全率好記,也更能體現其實質意義。準確率 precision,又稱 精度 正確率 以檢索為例,可以把搜尋情況用下圖表示 相關不相關 檢索到a b未檢測到cd a 檢索到的,相關的 搜到...