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

思路代码:

python 复制代码
# 导入所需的库
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)

数据代码:

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

python 复制代码
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_train

df2 = pd.DataFrame(data=X_test,
                   columns=['Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width'])
df2['Species'] = y_test

df1.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文件无法通过(泪的教训)。

相关推荐
贵慜_Derek1 分钟前
MAI-04|干净数据在工程上意味着什么:MAI 预训练数据治理
人工智能·算法·llm
feelmylife596 分钟前
Agent 记忆设计架构 — 分层记忆:什么时候该记住,什么时候该忘记
人工智能
阿黎梨梨26 分钟前
揭秘大语言模型的底层逻辑:从文本分词到高维向量的计算之旅
javascript·人工智能
moMo26 分钟前
AI工程化 03:给模型喂上下文
人工智能
火山引擎开发者社区10 小时前
没有长期记忆,Agent 谈何持续进化?一图看懂火山 Mem0:解锁 Agent 持续学习与进化之路
人工智能
冬奇Lab13 小时前
Workflow 系列(06):安全——跨步骤注入传播与四层防御
人工智能·工作流引擎
冬奇Lab13 小时前
每日一个开源项目(第149篇):RAG-Anything - 把图片、表格、公式当成一等公民的多模态 RAG 框架
人工智能·开源
米小虾13 小时前
AI Agent 安全实战指南:当智能体开始"不听话",开发者该如何应对?
人工智能·安全·agent