機器學習KNN識別準確率 2

2021-10-04 16:28:24 字數 3282 閱讀 5267

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 檢索到的,相關的 搜到...