缺點
Q:KNN與NN
A:
KNN找出距離最近的k個樣本,然後根據投票數最多的得到標籤
更高的k值可以讓分類的效果更平滑,使得分類器對於異常值更有抵抗力。
一層循環求L2距離
dists[i, :]=np.sqrt(np.sum(np.square(X[i,:] - self.X_train),axis=1)) #將每一行的求和結果賦值給dists[i,j]
直接求L2距離
dists += np.sum(self.X_train ** 2, axis=1) dists += np.sum(X**2,axis=1).reshape(num_test,1) dists -= 2 * X.dot(self.X_train.T) dists = np.sqrt(dists)
np.bincount()
plt.scatter([k] * len(accuracies), accuracies) #[k]* len(accuracies)同一個k有len(accuracies)個散點 plt.errorbar(k_choices, accuracies_mean, yerr=accuracies_std) #誤差曲線
查了下應該就是np.bincount()參數要求1維的,然後改爲以下解決:
y_pred[i] = np.argmax(np.bincount(closest_y.reshape(len(closest_y))))
交叉驗證和用指定k值運算正確率分開運行都可以運行,但在先交叉驗證找出最佳k之後再用最佳k進行預測計算就會報錯,具體原因還沒有想清楚