大家好,今天学习了3D 数据可视化、KNN 近邻算法、数据标准化,把完整流程记录成笔记,分享给刚入门的小伙伴~

本文包含:


2. 加载数据

data=np.loadtxt('datingTestSet2.txt')


3. 按标签拆分数据

data_1=data[data[:,-1]==1]
data_2=data[data[:,-1]==2]
data_3=data[data[:,-1]==3]


4. 创建 3D 画布

fig=plt.figure()
ax=plt.axes(projection='3d')


5. 绘制 3D 散点图

ax.scatter(data_1[:,0],data_1[:,1],data_1[:,2],c='red',marker='o')
ax.scatter(data_2[:,0],data_2[:,1],data_2[:,2],c='blue',marker='^')
ax.scatter(data_3[:,0],data_3[:,1],data_3[:,2],c='green',marker='s')


6. 设置坐标轴(非常关键!)

ax.set(xlabel="Xaxes",ylabel="Yaxes",zlabel="Zaxes")
ax.set_xlim(0, 80000)
ax.set_ylim(0, 20)
ax.set_zlim(0, 2)

作用:


7. 显示图像

plt.show()

最终图像如下:


二、KNN 分类代码

# x=data[:,:-1]
# y=data[:,-1]
# knn=KNeighborsClassifier(n_neighbors=9)
# knn.fit(x,y)
# test1=[[43605,0.120460,1.352013],
#        [15360,8.545204,1.340429],
#        [63796,5.856649,0.160006]
#        ]
# print(knn.predict(test1))


三、鸢尾花数据集 KNN 完整实战

1. 导入库

import pandas as pd
from sklearn.preprocessing import scale
from sklearn.neighbors import KNeighborsClassifier

2. 读取 Excel 数据

train_data=pd.read_excel("鸢尾花训练数据.xlsx")
test_data=pd.read_excel("鸢尾花测试数据.xlsx")


3. 拆分特征和标签

train_X=train_data[['萼片长(cm)','萼片宽(cm)','花瓣长(cm)','花瓣宽(cm)']]
train_y=train_data['类型_num']


4. 数据标准化(非常重要!)

data=pd.DataFrame()
data['萼片长标准化']=scale(train_X['萼片长(cm)'])
data['萼片宽标准化']=scale(train_X['萼片宽(cm)'])
data['花瓣长标准化']=scale(train_X['花瓣长(cm)'])
data['花瓣宽标准化']=scale(train_X['花瓣宽(cm)'])

作用:


5. 构建 KNN 模型并训练

kn=KNeighborsClassifier(n_neighbors=5)
kn.fit(data,train_y)


6. 训练集评分

train_predicted=kn.predict(data)
score=kn.score(data,train_y)
print("训练集准确率:", score)


7. 测试集处理

test_X=test_data[['萼片长(cm)','萼片宽(cm)','花瓣长(cm)','花瓣宽(cm)']]
test_y=test_data['类型_num']

8. 测试集标准化

data_test=pd.DataFrame()
data_test['萼片长标准化']=scale(test_X['萼片长(cm)'])
data_test['萼片宽标准化']=scale(test_X['萼片宽(cm)'])
data_test['花瓣长标准化']=scale(test_X['花瓣长(cm)'])
data_test['花瓣宽标准化']=scale(test_X['花瓣宽(cm)'])

9. 测试集评分

test_predicted=kn.predict(data_test)
score=kn.score(data_test,test_y)
print("测试集准确率:", score)


五、总结

今天把 3D 可视化、数据标准化、KNN 模型、模型评分 全部跑通了,收获很大!

  1.  3D 散点图绘制
  2. 鸢尾花数据集 KNN 分类实战
  3. 数据标准化作用与使用
  4. 模型训练与评分 

    一、3D 散点图可视化

    1. 导入库

    import matplotlib.pyplot as plt
    import numpy as np
    
  5. matplotlib:用来画图
  6. numpy:用来加载数据、处理数据
  7. 加载文本数据集
  8. 数据最后一列是标签(1/2/3)
  9. 把数据按分类拆成 3 组
  10. 方便画不同颜色
  11. 创建画布
  12. 开启 3D 坐标轴
  13. 三类点分别用:
    • 红色圆形
    • 蓝色三角
    • 绿色正方形
  14. 视觉区分更清晰
  15. 因为三个轴数据范围差距太大
  16. 不限制会压扁成平面
  17. 限制后才能看到真正 3D 分布
  18. 提取特征和标签
  19. 训练 KNN 模型
  20. 输入新数据,直接预测分类
    运行结果如下:
  21. 读取训练集 + 测试集
  22. train_X:4 个特征
  23. train_y:花的类型标签
  24. 把数据缩放到统一范围
  25. KNN 是距离算法,必须标准化!
  26. K=5
  27. 用标准化后的数据训练模型
  28. 查看模型学习效果
  29. 运行结果如下:


    四、今天学到的核心知识点

  30. 3D 图为什么会压扁?因为三个轴数据范围差距太大,必须用 set_xlim/ylim/zlim 限制范围。

  31. scale 是干嘛的?数据标准化,让不同大小的数据统一尺度。

  32. KNN 必须标准化吗?必须!KNN 根据距离计算,不标准化效果很差。

  33. score () 作用?直接输出模型准确率。

  34. 完整机器学习流程:读取数据 → 拆分特征标签 → 数据预处理 → 训练模型 → 评估模型

更多推荐