感知算法的设计与实现,对对鸢尾花实现二分类的完整python代码
时间: 2023-12-11 13:05:03 浏览: 29
以下是使用感知算法对鸢尾花进行二分类的完整Python代码:
```python
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
class Perceptron:
def __init__(self, learning_rate=0.1, n_iters=1000):
self.lr = learning_rate
self.n_iters = n_iters
self.activation_func = self._unit_step_func
self.weights = None
self.bias = None
def fit(self, X, y):
n_samples, n_features = X.shape
# Initialize weights and bias
self.weights = np.zeros(n_features)
self.bias = 0
y_ = np.array([1 if i>0 else 0 for i in y])
# Gradient descent for n_iters iterations
for _ in range(self.n_iters):
for idx, x_i in enumerate(X):
linear_output = np.dot(x_i, self.weights) + self.bias
y_predicted = self.activation_func(linear_output)
# Update weights and bias
update = self.lr * (y_[idx] - y_predicted)
self.weights += update * x_i
self.bias += update
def predict(self, X):
linear_output = np.dot(X, self.weights) + self.bias
y_predicted = self.activation_func(linear_output)
return y_predicted
def _unit_step_func(self, x):
return np.where(x>=0, 1, 0)
# Load iris dataset
iris = load_iris()
X = iris.data
y = iris.target
# Split data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Train perceptron algorithm on training data
perceptron = Perceptron(learning_rate=0.1, n_iters=1000)
perceptron.fit(X_train, y_train)
# Make predictions on test data and calculate accuracy
y_pred = perceptron.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
```
该代码实现了一个简单的感知器算法,并使用 iris 数据集进行二分类。在训练数据上拟合模型之后,我们使用测试数据集进行预测,并计算模型的准确性。最终输出的是模型在测试数据集上的准确性。