Sklearn中的make_circles方法生成训练样本,并随机生成测试样本,用KNN分类并可视化。

关于make_circles方法可查看:

Python 生成数据 make_circles 和 make_moons_游稚的博客-CSDN博客_make moon python

分析:使用KNN分类

          ①设定K值,代表需要得出距离测试样本最近的K个训练样本。

          ②生成训练样本和测试样本,并做区分性的散点图。(可视化)

          ③计算测试样本到所有训练样本的距离(采用欧式距离),并对距离进行排序,取前K个。

          ④使这K个训练样本的可视化与测试样本相同,达到分辨的效果。

          ⑤选取这K个样本中数量最多的标志作为该训练样本的标志。

代码:

import random
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import make_circles

#Sklearn中的make_circles方法生成训练样本
X_circle, Y_circle = make_circles(n_samples=400, noise=0.1, factor=0.1)

#随机生成测试样本
n=np.random.randint(0,10,size=1)
ran=random.random()
x=pow(-1,n)*ran
n=np.random.randint(0,10,size=1)
ran=random.random()
y=pow(-1,n)*ran
print(x,y)

#第一幅图
plt.subplot(1,2,1)
plt.scatter(X_circle[:, 0], X_circle[:, 1], s=100, marker="o", edgecolors='m', c=Y_circle)
# c=Y_circle划分两种标签数据的颜色
plt.title('data by make_circles()')
plt.scatter(x,y, s=300, marker="*", edgecolors='black', c='red')

#第二幅图
plt.subplot(1,2,2)
plt.scatter(X_circle[:, 0], X_circle[:, 1], s=100, marker="o", edgecolors='m', c=Y_circle)
plt.scatter(x,y, s=300, marker="*", edgecolors='black', c='red')
plt.title('KNN(k=15)')

#转化为DataFrame格式
data={'x坐标':X_circle[:,0],'y坐标':X_circle[:,1],}
olddata=pd.DataFrame(data,dtype='double')

#计算欧式距离,距离排序
new_x_y=[float(x),float(y)]
distance=(((olddata-new_x_y)**2).sum(1))**0.5#得到((x1-x2)^2+(y1-y2)^2)^0.5
#print(distance)
disdata=pd.DataFrame({'x坐标':X_circle[:,0],'y坐标':X_circle[:,1],'距离':distance},dtype='double').sort_values(by='距离')
#print((disdata))

#距离最短前k个
k=15
plt.scatter(disdata.iloc[:k,0],disdata.iloc[:k,1], s=100, marker="o",edgecolors='black', c='red')
plt.show()

效果图:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值