初学机器学习
可视化:将读入的数据用matlab库画出来
导入所需要的库import matplotlib.pyplot as plt
1.读入数据
data = np.loadtxt("D:\pythoncode\Sklearn_code\sklearn\datingTestSet2.txt")
2.划分数据
其中data[:,-1]是数据的切片,表示取出最后一列的所有行,即获取标签数据,data[data[:,-1] == 1]表示取标签值等于一的所有行。
# 获取最后一列标签数据为1的数据
data1 = data[data[:,-1] == 1]
# 获取最后一列标签数据为2的数据
data2 = data[data[:,-1] == 2]
# 获取最后一列标签数据为3的数据
data3 = data[data[:,-1] == 3]
3.设置画布
fig = plt.figure() #设置画布
ax = plt.axes(projection = "3d") # 表示升到三维。
# 画图
fig = plt.figure()
ax = plt.axes(projection = "3d")
4.画散点图
ax.scatter() # 表示要画散点图,里面的参数按照位置传参分别代表了x值,y值,z值,关键字传参中c表示color,要么直接输入颜色的英文,要么输入颜色对应的16进制,marker参数表示画图时数据的形状o,^,+,* ......
# 画散点图
ax.scatter(data1[:,0],data1[:,1],data1[:,2],c = "#00DDAA", marker="o")
ax.scatter(data2[:,0],data2[:,1],data2[:,2],c = "red", marker="^")
ax.scatter(data3[:,0],data3[:,1],data3[:,2],c = "yellow", marker="+")
ax.set(xlabel = "Xaxes",ylabel = "Yaxes",zlabel = "Zaxes")
plt.show()
5.效果图

K近邻算法(K-Nearest Neighborst):逻辑核心即近朱者赤,近墨者黑
主要分为两种问题
1.分类问题:要给新来的一个样本数据分类,看他周围最近的k个已知样本数据,哪个类别数量多,新样本就分到哪一类。
2.回归问题:新样本的值 = 这K个邻居的平均值
那么这么多的样本数据怎么找到最近的K个数据呢? 是用两点之间的距离来决定的,K近邻就是指离新样本距离最近的k个数据,欧氏距离公式
具体实例:鸢尾花测试
导入numpy,pandas,sklearn里的KNeighborsClassifier分类器
import numpy as np
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier
加载鸢尾花训练和测试数据集
tran_data = pd.read_excel("D:\pythoncode\Sklearn_code\sklearn\鸢尾花训练数据.xlsx")
test_data = pd.read_excel("D:\pythoncode\Sklearn_code\sklearn\鸢尾花测试数据.xlsx")
分离数据与标签
# 数据处理,分离数据与标签
tran_data_X = tran_data[["样本","萼片长(cm)","萼片宽(cm)","花瓣长(cm)","花瓣宽(cm)"]]
tran_data_y = tran_data["类型_num"]
test_data_X = test_data[["样本","萼片长(cm)","萼片宽(cm)","花瓣长(cm)","花瓣宽(cm)"]]
test_data_y = test_data["类型_num"]
数据标准化
# 数据标准化
from sklearn.preprocessing import scale
data_tran_X = pd.DataFrame()
data_tran_X["萼片长标准化"] = scale(tran_data_X["萼片长(cm)"])
data_tran_X["萼片宽标准化"] = scale(tran_data_X["萼片宽(cm)"])
data_tran_X["花瓣长标准化"] = scale(tran_data_X["花瓣长(cm)"])
data_tran_X["花瓣宽标准化"] = scale(tran_data_X["花瓣宽(cm)"])
data_test_X = pd.DataFrame()
data_test_X["萼片长标准化"] = scale(test_data_X["萼片长(cm)"])
data_test_X["萼片宽标准化"] = scale(test_data_X["萼片宽(cm)"])
data_test_X["花瓣长标准化"] = scale(test_data_X["花瓣长(cm)"])
data_test_X["花瓣宽标准化"] = scale(test_data_X["花瓣宽(cm)"])
数据标准化是非常有必要的,因为各个数据的单位都不一样,这样会导致数据里有的列的值非常大,有的列的值非常小,在计算欧式距离时,数值大的则会占巨大权重,这样算出来的距离主要都由数值大的特征决定,非常不合理。因此需要用标准化,这里使用的是Z-score标准化,公式:
:原始特征值
:该特征在整个样本上的均值
:该特征在整个样本上的标准差
处理后的结果:数据的均值变为 0,标准差变为 1。数据不再带有单位(无量纲化),只表示相对位置。
创建knn,参数n_neighbors=15表示找最近的15个邻居,默认参数是5。使用KNeighborsClassifier里面的fit方法训练数据,参数需要数据集和标签。
knn = KNeighborsClassifier(n_neighbors=14)
knn.fit(data_tran_X,tran_data_y)
自预测,判断训练好的模型的性能
# 自预测
tran_predict = knn.predict(data_tran_X)
score = knn.score(data_tran_X,tran_data_y)
print("自预测的分数是:",score)
![]()
用测试集预测
# 使用测试集预测
test_predict = knn.predict(data_test_X)
score_test = knn.score(data_test_X,test_data_y)
print("测试集的准确率为:",score_test)
![]()
更多推荐
所有评论(0)