当前位置: 首页 > news >正文

NCU-机器学习-作业1:基于KNN的IRIS分类

任务描述:

请设计一个分类器,根据花朵的萼片长度(sepal length)、萼片宽度sepalwidth)、花瓣长度(petal length)和花瓣宽度(petal width)来预测它属于三种不同的鸢尾属植物setosa、versicolor和virginica中的哪一种。

输入数据:

在train/目录下包含一个train.csv文件,其中每行代表一个已知样例。文件中每行共有6列,第一列为id,2-5列为四个属性值,最后一列表示该花朵属于哪种植物,分别用0,1,2来表示setosa、versicolor和virginica。

在test/目录下包含一个test.csv文件,与train.csv类似,每一行表示一朵花瓣的四个属性参数和ID,不过不包含它的分类值,您需要根据参数给出预测。

输出数据:

你的程序需要生成一个result.csv文件,用于保存你程序对花朵情况的预测结果。输出csv文件格式见下方

输入样例:

Id,Sepal.Length,Sepal.Width,Petal.Length,Petal.Width,Species
1,5.1,3.5,1.4,0.2,0
2,4.9,3.0,1.4,0.2,0
3,4.7,3.2,1.3,0.2,0
4,4.6,3.1,1.5,0.2,0

输出样例:

Id,Species
1,1
2,0
3,2
4,2
5,2
6,2

思路代码:

# 导入所需的库
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier# 加载训练数据
data = pd.read_csv('train/train.csv')# 分割特征和目标变量
X = data.iloc[:, 1:-1]  # 特征,0列为ID,所以从1列开始
y = data.iloc[:, -1]  # 目标值 (labels)# 数据预处理(暂时只做标准化,也可以不做)
scaler = StandardScaler()
X_train = scaler.fit_transform(X)
y_train = list(y)# 初始化并训练KNN分类器
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)# 加载测试数据
test_data = pd.read_csv('test/test.csv')# 分割特征和目标变量
X = test_data.iloc[:, 1:-1]  # 特征
y = test_data.iloc[:, -1]   # 目标值# 数据预处理
scaler = StandardScaler()
X_test = scaler.fit_transform(X)
y_test = list(y)# 预测
y_pred = knn.predict(X_test)# print(knn.score(X_test, y_test))df = pd.DataFrame(data=test_data['Id'], columns=['Id'])
df['Species'] = y_pred
df.to_csv('result.csv', index=False)

数据代码:

如果无数据测试,可以从内置数据集中生成,代码如下。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import pandas as pd# 加载鸢尾花数据集
iris_dataset = load_iris()
# 划分训练集和测试集,一共150份数据,按9:1划分数据集
X_train, X_test, y_train, y_test = train_test_split(iris_dataset.data, iris_dataset.target, test_size=0.1)df1 = pd.DataFrame(data=X_train,columns=['Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width'])
df1['Species'] = y_traindf2 = pd.DataFrame(data=X_test,columns=['Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width'])
df2['Species'] = y_testdf1.to_csv('train/train.csv', index_label='Id')  # 训练集
df2.to_csv('test/test.csv', index_label='Id')  # 测试集

答案提交:

提交result.csv压缩成的压缩包即可,无需提交py文件,result.csv中记录要求15条。为了安心,也可以在压缩包中加入py文件,单纯提交py文件无法通过(泪的教训)。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 进程第五章:进程替换
  • 计算机网络: 第一章 概述_2:计算机网络的性能指标
  • python_使用tkinter建立一个页面的模板
  • 自动化测试面试题(含答案)
  • vue3 响应式 API:shallowRef()和shallowReactive()
  • orcad画封装,如何隐藏引脚编号,线宽
  • 【MySQL】初识MySQL—MySQL是啥,以及如何简单操作???
  • [环境配置]Pycharm手动安装汉化插件
  • c/c++ 指针数组
  • 05:【江科大stm32】:定时器输出比较功能(PWM)
  • Facebook 小店:不出单?没流量?如何解决?
  • Facebook的AI进化:如何用智能技术提升内容推荐
  • ubuntu 安装 jdk
  • “99公益日”绿葆携手一镇一业,捐赠价值8万元的取袋机等物资
  • Unity中使用四元数限制旋转
  • 【刷算法】从上往下打印二叉树
  • ECMAScript入门(七)--Module语法
  • Gradle 5.0 正式版发布
  • HTTP那些事
  • HTTP中的ETag在移动客户端的应用
  • Java 内存分配及垃圾回收机制初探
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Linux Process Manage
  • Vim 折腾记
  • vue-cli在webpack的配置文件探究
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 京东美团研发面经
  • 聊聊directory traversal attack
  • 入口文件开始,分析Vue源码实现
  • MyCAT水平分库
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​插件化DPI在商用WIFI中的价值
  • ​如何防止网络攻击?
  • $ git push -u origin master 推送到远程库出错
  • (07)Hive——窗口函数详解
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (六)Hibernate的二级缓存
  • (十一)c52学习之旅-动态数码管
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .form文件_SSM框架文件上传篇
  • .Net 6.0 处理跨域的方式
  • .NET Core中Emit的使用
  • .NET Standard 的管理策略
  • .net 流——流的类型体系简单介绍
  • .Net 执行Linux下多行shell命令方法
  • .net6 当连接用户的shell断掉后,dotnet会自动关闭,达不到长期运行的效果。.NET 进程守护
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • @Documented注解的作用
  • @RequestMapping 的作用是什么?