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

相关推荐
mlidongfeng几秒前
[AI][昇腾950] Scalar 性能优化
人工智能·性能优化
鱼饼Y4 分钟前
AI时代,使用大模型学习LangChain (3)——LCEL
人工智能·langchain
冬哥聊AI5 分钟前
三面追问:百万行代码库怎么跑好Claude Code?harness五层才是关键
人工智能
云杨15 分钟前
SnakeEats 技术解剖:扫描器是蛇,文档是它会生长的身体——人机协作的新数据层
人工智能·开源
韩师傅19 分钟前
重生之我成为模型 番外 · 饲养员厨房下——大厨古法餐
深度学习·机器学习·计算机视觉
小鬼头编程24 分钟前
信息学竞赛体系(CSP-J/S、NOIP、NOI、IOI)
c++·人工智能·青少年编程
MRfyyt25 分钟前
一个 for 循环搞定 AI Agent:Function Calling + ReAct 实战
人工智能
正在走向自律29 分钟前
AI 辅助研发内部复盘(4/5):约束、上下文与技能——把“人的判断”工程化
人工智能·ai编程·ai代码生成·上下文工程·ai辅助研发·skills封装经验
Bigger30 分钟前
因为一句「华流才是最屌的」,我做了一个中国风设计的 Skill
前端·人工智能·设计
陈天伟教授32 分钟前
图解人工智能(99)人工智能前沿-走向未来
人工智能