鸢尾花分类在机器学习中是经典的分类问题,通常被初学者用来学习分类算法。
鸢尾花数据集包含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}')