KNN 算法
KNN 的实质是根据 预测值 与训练集之间的距离来进行分类。
下面代码使用 欧氏距离来表示点集之间的距离,具体代码如下:
class Knn():
def fit(self, X, y):
self.X_train = X
self.y_train = y
def predict(self, X, k):
X_train = self.X_train
y_train = self.y_train
X = np.tile(X,(X_train.shape[0],1))
diff = (X_train - X) ** 2
diff.sum(axis = 1) ** 0.5 # sum 函数只能是 h.sum(axis = 1)
rank = diff_sum.argsort() # 返回的排序是从小到大排序的
result = {}
for i in range(k):
vote = y_train[rank[i]]
result[vote] = result.get(vote,0) + 1
# 取出最大的值
# 这里没用排序,而是用了遍历,节省了时间和空间复杂度
max_c = 0
num = -1
for k, v in result:
if (v > max_c):
max_c = v
num = k
return num这里用到一个numpy 的内置函数来返回排序之后的index:
np.argsort()
这个函数的返回值是从小到大排序之后的 index,如果想要返回从大到小的 index,应该进行如下操作:
a = np.random.randint(0,100,3)
a.argsort() # 从小到大
(-a).argsort() # 从大到小a.sum(axis = 1) 表示横着求和
引包形式:
from sklearn.neighbors import KNeighborsClassifier # 从 sklearn 里面引包
knn = KNeighborsClassifier(n_neighbors = k) # 创建一个model
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
742

被折叠的 条评论
为什么被折叠?



