sklearn速度复习-knn

#人工生点人工算法
import matplotlib.pyplot as plt
import numpy as np
import operator
x1 = np.array([3,2,1])#1类点X坐标
y1 = np.array([104,100,81])#1类点Y坐标
x2 = np.array([101,99,98])#2类点X坐标
y2 = np.array([10,5,2])#2点点Y坐标
scatter1 = plt.scatter(x1,y1,c='r')#红点
scatter2 = plt.scatter(x2,y2,c='b')#蓝点
x = np.array([18])# 未知数据1个
y = np.array([90])# 未知数据1个
scatter3 = plt.scatter(x,y,c='k')#黑色
plt.legend(handles=[scatter1,scatter2,scatter3],labels=['labelA','labelB','X'],loc='best')#画图例
plt.show()#画图

x_data = np.array([[3,104],[2,100],[1,81],[101,10],[99,5],[81,2]])#已知分类的数据
y_data = np.array(['A','A','A','B','B','B'])#已知分类数据分类
x_test = np.array([18,90])#示知数据
x_data_size = x_data.shape[0]# 计算样本数量
np.tile(x_test, (x_data_size,1))# 复制x_test
diffMat = np.tile(x_test, (x_data_size,1)) - x_data# 计算x_test与每一个样本的差值
sqDiffMat = diffMat**2# 计算差值的平方
sqDistances = sqDiffMat.sum(axis=1)# 求和
distances = sqDistances**0.5# 开方
sortedDistances = distances.argsort()# 从小到大排序
classCount = {}
k = 5# 设置k
for i in range(k):
    votelabel = y_data[sortedDistances[i]] # 获取标签
    classCount[votelabel] = classCount.get(votelabel,0) + 1 # 统计标签数量
sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1), reverse=True)# 根据operator.itemgetter(1)-第1个值对classCount排序,然后再取倒序
knnclass = sortedClassCount[0][0]# 获取数量最多的标签
print(knnclass)
//导入数据人工算法
import numpy as np
from sklearn import datasets
from sklearn.metrics import classification_report,confusion_matrix
import operator
import random
def knn(x_test, x_data, y_data, k):
    x_data_size = x_data.shape[0]# 计算样本数量
    np.tile(x_test, (x_data_size,1))# 复制x_test
    diffMat = np.tile(x_test, (x_data_size,1)) - x_data# 计算x_test与每一个样本的差值
    sqDiffMat = diffMat**2# 计算差值的平方
    sqDistances = sqDiffMat.sum(axis=1) # 求和
    distances = sqDistances**0.5# 开方
    sortedDistances = distances.argsort() # 从小到大排序
    classCount = {}
    for i in range(k):
        votelabel = y_data[sortedDistances[i]] # 获取标签
        classCount[votelabel] = classCount.get(votelabel,0) + 1# 统计标签数量
    sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1), reverse=True)# 根据operator.itemgetter(1)-第1个值对classCount排序,然后再取倒序
    return sortedClassCount[0][0]# 获取数量最多的标签
iris = datasets.load_iris()# 载入数据
# x_train,x_test,y_train,y_test = train_test_split(iris.data, iris.target, test_size=0.2) #分割数据0.2为测试数据,0.8为训练数据
data_size = iris.data.shape[0]#打乱数据
index = [i for i in range(data_size)] 
random.shuffle(index)  
iris.data = iris.data[index]
iris.target = iris.target[index]
test_size = 40#切分数据集
x_train = iris.data[test_size:]
x_test =  iris.data[:test_size]
y_train = iris.target[test_size:]
y_test = iris.target[:test_size]
predictions = []
for i in range(x_test.shape[0]):
    predictions.append(knn(x_test[i], x_train, y_train, 5))
print(classification_report(y_test, predictions))
print(confusion_matrix(y_test,predictions))
//导入数据模板算法
from sklearn import neighbors
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
import random
iris = datasets.load_iris()# 载入数据
print(iris)
# 打乱数据切分数据集
# x_train,x_test,y_train,y_test = train_test_split(iris.data, iris.target, test_size=0.2) #分割数据0.2为测试数据,0.8为训练数据
data_size = iris.data.shape[0]#打乱数据
index = [i for i in range(data_size)] 
random.shuffle(index)  
iris.data = iris.data[index]
iris.target = iris.target[index]
test_size = 40#切分数据集
x_train = iris.data[test_size:]
x_test =  iris.data[:test_size]
y_train = iris.target[test_size:]
y_test = iris.target[:test_size]
model = neighbors.KNeighborsClassifier(n_neighbors=3)# 构建模型
model.fit(x_train, y_train)
prediction = model.predict(x_test)
print(classification_report(y_test, prediction))

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值