numpy KNN简单实现 分类:机器学习

来源:互联网 发布:jdk 7u67 linux x64 编辑:程序博客网 时间:2024/06/10 01:50
numpy支持矩阵减向量(每行减去某个向量) 列的情况可以考虑转置。

R实现:
library(class)
attach(iris)
train <- iris[,1:2]
y <- as.numeric(Species)
x <- train
fit <- knn(x, x, y)
print(1 - sum(fit==y)/length(y))

利用ndarray的诸多特性,可以实现非常简短的(DIY)KNN:
[python] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. import numpy as np   
  2. from sklearn.datasets import load_iris  
  3. iris = load_iris()  
  4. #print iris.DESCR  
  5. X = iris.data[:,1:3]  
  6. y = iris.target   
  7.   
  8. def predict_y(x, k = 1):  
  9.  distance_array = np.linalg.norm(X - x, axis = 1)  
  10.  # the increase distance indexs  
  11.  distance_indexs = np.argsort(distance_array)[1:k + 1]  
  12.  y_unique_counts = np.unique(y[distance_indexs], return_counts = True)  
  13.   
  14.  return y_unique_counts[0][np.argmax(y_unique_counts[1])]  
  15.   
  16. predict = map(predict_y, X)  
  17. error_num = 0  
  18. for i in range(len(predict)):  
  19.  if predict[i] != y[i]:  
  20.   error_num += 1  
  21.   
  22. print “error_error :”  
  23. print float(error_num) / len(predict)  
import numpy as np from sklearn.datasets import load_irisiris = load_iris()
#print iris.DESCRX = iris.data[:,1:3]y = iris.target def predict_y(x, k = 1): distance_array = np.linalg.norm(X - x, axis = 1) # the increase distance indexs distance_indexs = np.argsort(distance_array)[1:k + 1] y_unique_counts = np.unique(y[distance_indexs], return_counts = True) return y_unique_counts[0][np.argmax(y_unique_counts[1])]predict = map(predict_y, X)error_num = 0for i in range(len(predict)): if predict[i] != y[i]:  error_num += 1print “error_error :”print float(error_num) / len(predict)




更多了解请浏览:http://blog.csdn.net/sinat_30665603

阅读全文
0 0
原创粉丝点击