KNN-水仙花的分类

题目:

思路:

1、处理数据集,这里用的是题目已知的数据集,所以说需要提前将写好的数据放到excel表格里,再进行读取。

2、将数据集划分为训练集和测试集

3、定义K-NN模型。

4、训练模型

5、预测模型

6、计算分类精度

7、使用网格搜索法

8、训练模型

9、可视化

结果:

大致就是这样,代码如下:

python 复制代码
#加载数据集
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
import warnings
warnings.filterwarnings('ignore')

import matplotlib
print(matplotlib.matplotlib_fname())

# 加载数据集
def read():
    filename = r"水仙花.xlsx"
    data = pd.read_excel(filename, header=None)
    x1 = data.iloc[1:, [0, 1]].values
    x2 = data.iloc[1:, [3, 4]].values
    # print(x2)
    y1 = data.iloc[1:, 2].values
    y2 = data.iloc[1:, 5].values
    X = np.vstack((x1, x2))  # 竖向合并
    y = np.hstack((y1, y2))  # 横向合并
    y = y.astype(int)
    return X, y
# 划分训练集和测试集
X,y=read()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 定义K-NN模型
knn = KNeighborsClassifier(n_neighbors=3)  # 设置k=3
#训练模型
knn.fit(X_train, y_train)
#预测测试集
y_pred = knn.predict(X_test)
#计算分类精度
accuracy = accuracy_score(y_test, y_pred)
print('分类精度:', accuracy)

# 使用网格搜索找到最佳参数
param_grid = {'n_neighbors': [1,3, 5, 7, 9]}  # 尝试不同的k值
grid_search = GridSearchCV(knn, param_grid, cv=5)
#训练模型
grid_search.fit(X_train, y_train)
print('最佳参数:', grid_search.best_params_)
print('最佳分类精度:', grid_search.best_score_)
#可视化
#绘制散点图
cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])
cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF'])

x_min, x_max = X[:, 0].min() - 0.1, X[:, 0].max() + 0.1
y_min, y_max = X[:, 1].min() - 0.1, X[:, 1].max() + 0.1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02))
Z = knn.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.figure()
plt.pcolormesh(xx, yy, Z, cmap=cmap_light)
# 绘制训练样本和测试样本
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=cmap_bold, edgecolor='k')
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=cmap_bold, marker='x', edgecolor='k')

plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.title('K-NN分类(k=3)')
plt.show()

可能出现的问题:

图片中中文无法显现,原因是配置文件中没有配置中文库,解决办法:

首先打印出配置文件所在的目录:

代码如下:

python 复制代码
import matplotlib
print(matplotlib.matplotlib_fname())

然后根据地址找到相应文件,ctr+f搜索font.family,找到下面图片中的两行

然后,将其注释符号全部删掉,并在font.sans-serif中添加中文字体名称

这样再重新运行程序代码即可。

相关推荐
徐子童10 小时前
网络协议---TCP协议
网络·网络协议·tcp/ip·面试题·1024程序员节
扫地的小何尚2 天前
NVIDIA RTX PC开源AI工具升级:加速LLM和扩散模型的性能革命
人工智能·python·算法·开源·nvidia·1024程序员节
数据皮皮侠AI3 天前
上市公司股票名称相似度(1990-2025)
大数据·人工智能·笔记·区块链·能源·1024程序员节
开开心心就好3 天前
系统清理工具清理缓存日志,启动卸载管理
linux·运维·服务器·神经网络·cnn·pdf·1024程序员节
Evan东少6 天前
[踩坑]笔记本Ubuntu20.04+NvidiaRTX5060驱动+cuda+Pytorch+ROS/Python实现人脸追踪(环境准备)
1024程序员节
不爱编程的小陈7 天前
C/C++每日面试题
面试·职场和发展·1024程序员节
开开心心就好7 天前
右键菜单管理工具,添加程序自定义名称位置
linux·运维·服务器·ci/cd·docker·pdf·1024程序员节
码农三叔8 天前
(4-2-05)Python SDK仓库:MCP服务器端(5)Streamable HTTP传输+Streamable HTTP传输
开发语言·python·http·大模型·1024程序员节·mcp·mcp sdk
西幻凌云12 天前
初始——正则表达式
c++·正则表达式·1024程序员节
启芯硬件12 天前
电源XL6009E1的dieshot细节分析-芯片设计干货
大数据·经验分享·硬件工程·1024程序员节