鸢尾花分类在机器学习中是经典的分类问题,通常被初学者用来学习分类算法。

鸢尾花数据集包含150个样本,每个样本有4个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度。该数据集用于分类任务,标签分为三类:Iris-setosa、Iris-versicolor和Iris-virginica。

逻辑回归是一种常用的分类算法,用于解决二分类问题。它通过计算输入特征的线性组合,并应用一个sigmoid函数来输出概率。 鸢尾花分类其实是多分类,但是为了简化算法与实现,我们使用逻辑回归算法进行训练,并输出每个测试样本的预测类别及其最大概率。并且为了简化算法与实现,我们使用sklearn库中的LogisticRegression类进行实现,并且为了防止过拟合以及加快收敛速度,我们设置max_iter=200。

标准代码

from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
import numpy as np
import random
# 1. 加载数据集
iris = load_iris()
X = iris.data
y = iris.target

n = int(input())

random.seed(42)  # 设置随机种子
indices = list(range(len(X)))  # 创建索引列表
random.shuffle(indices)  # 洗牌
X = X[indices]  # 根据洗牌后的索引重新排列数据
y = y[indices]  # 根据洗牌后的索引重新排列标签

X_train = X[:-n]
X_test = X[-n:]
y_train = y[:-n]
y_test = y[-n:]

# 3. 使用逻辑回归算法进行训练
model = LogisticRegression(max_iter=200)
model.fit(X_train, y_train)

# 4. 进行预测
y_pred = model.predict(X_test)
y_prob = model.predict_proba(X_test)

# 5. 输出结果
for i in range(len(y_pred)):
    print(f'{iris.target_names[y_pred[i]]} {np.max(y_prob[i]):.2f}')