Sklearn学习笔记##第一记
接着上一节的话题,这节继续学习KNN,拿图说话。不多废话,直接上例子。
这一节里边扯到一块数据归一化的方法,理论不多少。实例里边讲一下。
导入模块
from __future__ import print_function
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt
import numpy as np
from numpy import random
本次数据集使用的随机数据,所以导入random模块
生成数据
normal(loc=,scale=,size=)
三个参数大致说一下
loc参数:在一维坐标系中的点。
scale参数:以loc为原点,进行左右缩放。
size参数:数据集的大小。
random.normal(50, 6, 200)
以这个为例。该数据集的取值范围就是 44<=x<=56,大小为200个随机数。
x1=random.normal(50,6,200)
y1=random.normal(5,0.5,200)
x2=random.normal(30,6,200)
y2=random.normal(4,0.5,200)
x3=random.normal(45,6,200)
y3=random.normal(2.5,0.5,200)
此时讲数据绘制出来,此时要画散点图就用到了scater();
plt.scatter(x1,y1,c='r',marker='s',s=50,alpha=0.8)
plt.scatter(x2,y2,c='g',marker='^',s=50,alpha=0.8)
plt.scatter(x3,y3,c='b',s=50,alpha=0.8)
plt.show()
数据处理
要将三个数据集合并起来,就需要用到numpy的concatenate函数,讲多个列表链接为一个列表。
x_gp = np.concatenate((x1,x2,x3))
y_gp = np.concatenate((y1,y2,y3))
数据归一化
这里用到了min-max标准化,也成为利差标准化,是对原始数据的线性变化,使其结果值映射到[0-1]之间。公式如下:
X∗=x−minmax−min
max:数据样本的最大值,min:数据样本的最小值。
x_del=max(x_gp)-min(x_gp)
y_del=max(y_gp)-min(y_gp)
x_normalized=[x/(x_del) for x in x_gp]
y_normalized=[y/(y_del) for y in y_gp]
将处理过后的数据再一一组合起来。
xy_normalized=zip(x_normalized,y_normalized)
xy_normalized=[*xy_normalized]
给该样本创建对等大小的标签。以区分类别,给,红色分配为0,绿色分配为1,蓝色分配为2 各200个。
labels=[0]*200+[1]*200+[2]*200
KNN建模
修改默认K的值,改为30.
clf= KNeighborsClassifier(n_neighbors=30 )
clf.fit(xy_normalized,labels)
预测类型
预测结果之前,一定要归一化。除以x_del , y_del
result=clf.predict([(50/x_del,3/y_del),(10/x_del,2/y_del)])
print(result)
这就说明[50,3]属于第二类,[10,2]属于第一类。
result:[2 1]
后续更新