用python编写单感知器训练和测试程序,用于对给定的数据进行分类
时间: 2024-05-11 18:16:23 浏览: 14
好的,下面是单感知器训练和测试程序的代码示例:
首先是训练部分的代码:
```python
import numpy as np
# 定义单个样本的训练函数
def train_perceptron(x, y, w, b, lr):
# 计算感知器分类结果
pred = np.dot(w, x) + b
if pred > 0:
pred = 1
else:
pred = 0
# 更新模型参数
w += lr * (y - pred) * x
b += lr * (y - pred)
return w, b
# 训练函数
def train(X, Y, lr=0.1, epochs=100):
# 参数初始化
num_features = X.shape[1]
w = np.random.randn(num_features)
b = np.random.randn(1)
# 开始训练
for i in range(epochs):
for j in range(X.shape[0]):
w, b = train_perceptron(X[j], Y[j], w, b, lr)
return w, b
```
以上代码实现了单个样本的训练和整个数据集的迭代训练。其中,输入参数X为训练数据的特征矩阵,每一行代表一个样本,Y为训练数据的标签,lr为学习率,epochs为迭代次数。返回值w和b即为训练好的模型参数。
接下来是测试部分的代码:
```python
# 预测函数
def predict(x, w, b):
y_pred = np.dot(w, x) + b
if y_pred > 0:
y_pred = 1
else:
y_pred = 0
return y_pred
# 测试函数
def test(X, Y, w, b):
cnt = 0
# 遍历所有测试样本,计算预测结果并统计正确率
for i in range(X.shape[0]):
y_pred = predict(X[i], w, b)
if y_pred == Y[i]:
cnt += 1
acc = cnt / X.shape[0]
return acc
```
以上代码实现了预测函数和测试函数。输入参数X为测试数据的特征矩阵,每一行代表一个样本,Y为测试数据的标签,w和b为训练好的模型参数。返回值acc为测试结果的正确率。
最后,我们将训练和测试部分结合起来,进行完整的程序演示:
```python
# 生成随机样本
X = np.random.randn(1000, 2)
Y = (X[:,0] + X[:,1] > 0).astype(np.int)
# 划分训练集和测试集
X_train, X_test = X[:800], X[800:]
Y_train, Y_test = Y[:800], Y[800:]
# 训练模型
w, b = train(X_train, Y_train)
# 测试模型
acc = test(X_test, Y_test, w, b)
# 打印测试结果
print('Test accuracy:', acc)
```
以上代码生成了一组随机的二维样本数据,用于进行二分类训练和测试。该程序演示了如何使用Python编写单感知器训练和测试程序。希望能对你有所帮助!