针对鸢尾花数据集进行处理并实现二分类,画出结果展示图,损失值图及类别预测概率
时间: 2024-10-24 16:13:25 浏览: 21
基于jupyter notebook的python编程—–机器学习中的线性分类器及相应判定方法(鸢尾花数据集的分类可视化)
5星 · 资源好评率100%
针对鸢尾花数据集(Iris dataset),首先需要对其进行预处理,包括加载数据、数据清洗、特征缩放等步骤。通常使用的Python库如scikit-learn提供了一个名为`load_iris`的函数可以方便地导入数据。
对于二分类任务,例如选择两个物种进行区分,我们可以选择一种二分类算法,比如逻辑回归、支持向量机(SVM)或决策树的二分类版本。假设我们选择了逻辑回归:
```python
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
# 加载数据
iris = datasets.load_iris()
X = iris.data[:, :2] # 取前两维度作为输入特征
y = (iris.target == 0) | (iris.target == 2) # 选择Setosa和Versicolor作为二分类目标
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 数据标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 训练模型
model = LogisticRegression()
model.fit(X_train, y_train)
# 模型评估与预测
y_pred_proba = model.predict_proba(X_test)[:, 1]
y_pred = model.predict(X_test)
# 绘制决策边界与概率分布图
plt.figure(figsize=(8, 6))
plt.scatter(X_train[y_train, 0], X_train[y_train, 1], color='blue', label='正例')
plt.scatter(X_train[~y_train, 0], X_train[~y_train, 1], color='red', label='反例')
plt.plot([min(X_train[:, 0]), max(X_train[:, 0])],
[model.coef_[0][0] * min(X_train[:, 0]) + model.intercept_,
model.coef_[0][0] * max(X_train[:, 0]) + model.intercept_],
'k-', linewidth=3, label='决策边界')
for i in range(len(y_pred)):
if y_pred[i]:
plt.annotate('%.2f' % y_pred_proba[i], (X_test[i][0], X_test[i][1]))
plt.xlabel('特征1')
plt.ylabel('特征2')
plt.legend()
plt.show()
# 绘制损失值图
history = model.history
plt.plot(history['loss'], label='Train Loss')
plt.plot(history['val_loss'], label='Validation Loss')
plt.title('Loss over epochs')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.show()
```
这部分展示了如何对鸢尾花数据集进行二分类处理,并通过可视化展示了决策边界、预测概率以及训练过程中的损失变化。注意实际运行代码需要安装必要的库(如sklearn和matplotlib)。
阅读全文