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

相关推荐
roman_日积跬步-终至千里几秒前
【计算机视觉(6)】边缘与直线检测基础篇:从Canny到Hough变换
人工智能·计算机视觉
Keep__Fighting2 分钟前
【机器学习:决策树】
人工智能·算法·决策树·机器学习·scikit-learn
张彦峰ZYF3 分钟前
AI赋能原则4解读思考:AI 不是“可选的加分项”,而是重构生存方式的基础设施
人工智能·ai·ai赋能与落地
weixin_421585013 分钟前
模型组装:new_model = tf.keras.Model(inputs=输入张量, outputs=输出张量)
人工智能·深度学习
沃达德软件5 分钟前
警务大数据可视化展示
大数据·人工智能·信息可视化
paopao_wu5 分钟前
ComfyUI遇上Z-Image(3):文生图/图生图
人工智能·ai·文生图·图生图·comfyui·z-image·we
小白|9 分钟前
OpenHarmony + Flutter 混合开发实战:深度集成 AI Kit 实现端侧图像识别与智能分析
人工智能·flutter
ULTRA??17 分钟前
最小生成树kruskal算法实现python,kotlin
人工智能·python·算法
古城小栈20 分钟前
Spring AI Alibaba 重磅更新:Java 的开发新纪元
java·人工智能·spring
智算菩萨22 分钟前
从试错学习到安全进化:强化学习重塑自动驾驶决策与控制
人工智能·机器学习·自动驾驶