帮我写一个感知机在三维空间对鸢尾花后两类样本进行区分的代码
时间: 2024-10-16 21:08:58 浏览: 22
基于感知机Perceptron的鸢尾花分类实践
5星 · 资源好评率100%
当然可以。感知器(Perceptron)通常用于二分类问题,但我们可以扩展到多维空间,例如使用线性分类器来区分鸢尾花数据集中的两种类别。这里我们先假设你知道鸢尾花数据集来自`scikit-learn`库,其中最常用的版本是鸢尾花(Iris dataset),包含三个特征(花瓣长度、花瓣宽度、萼片长度)。
为了在三维空间中(比如花瓣长度、花瓣宽度和萼片长度这三个特征)区分后两种类别(假设是Setosa和Versicolor),我们将使用`sklearn`的`Perceptron`模型。首先确保已经安装了所需的库:
```bash
pip install numpy pandas scikit-learn
```
接下来,这里是代码示例:
```python
import numpy as np
from sklearn import datasets
from sklearn.linear_model import Perceptron
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
# 加载鸢尾花数据
iris = datasets.load_iris()
X = iris.data[:, [2, 3]] # 我们只取前两个维度(萼片长度和花瓣宽度)
y = (iris.target == 0) + (iris.target == 1) # 将后两者设为一类,因为Perceptron不支持多类别标签
# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
# 初始化并训练Perceptron模型
perceptron = Perceptron(max_iter=100, shuffle=True)
perceptron.fit(X_train, y_train)
# 预测并评估模型性能
y_pred = perceptron.predict(X_test)
accuracy = np.mean(y_pred == y_test)
print(f"Accuracy: {accuracy * 100:.2f}%")
# 绘制决策边界
fig, ax = plt.subplots(figsize=(8, 6))
ax.scatter(X_train[y_train==0, 0], X_train[y_train==0, 1], color='red', label='Setosa')
ax.scatter(X_train[y_train==1, 0], X_train[y_train==1, 1], color='blue', label='Versicolor')
line = perceptron.coef_[0] * x + perceptron.intercept_
ax.plot([-5, 5], [-5*perceptron.coef_[0][0]/perceptron.coef_[0][1], -5], 'k-', linewidth=2)
ax.plot([-5, 5], [5*perceptron.coef_[0][0]/perceptron.coef_[0][1], 5], 'k-', linewidth=2)
ax.set_xlabel('Petal Length')
ax.set_ylabel('Petal Width')
ax.legend()
plt.show()
#
阅读全文