我正在尝试学习 Perceptron,而 Python 是目前对我来说最简单的语言。 我正在使用 Ivan Nunves 关于 AI 的书中的训练和拟合数据库。 在下面按照我的代码进行操作。
from random import random
import csv
omega = []
with open(r'./training_data.csv') as file:
spamreader = csv.reader(file)
for row in spamreader:
row.insert(0, -1)
omega.append(row)
eta = 0.01
w = [random() for _ in range(len(omega[0]))]
epochs = 100
for _ in range(epochs):
for k in omega:
x = [float(xi) for xi in k[:-1]]
d = int(k[-1])
u = sum(wi * xi for wi, xi in zip(w, x))
y = -1 if u < 0 else 1
if y != d:
w = [wi + eta * (d - y) * xi for wi, xi in zip (w, x)]
error = 0
for k in omega:
x = [float(xi) for xi in k[:-1]]
d = int(k[-1])
u = sum(wi * xi for wi, xi in zip(w, x))
y = -1 if u < 0 else 1
if y != d:
error += 1
print(100 - error / len(omega) * 100)
x = []
with open(r'./data.csv') as file:
sampreader = csv.reader(file)
for row in sampreader:
x.append(row)
for xk in x:
u = sum(wi * float(xi) for wi, xi in zip(w, xk))
y = -1 if u < 0 else 1
print(f'{xk} {y}')
作为环境,我使用 Google Colab 和两个 CSV 文件来存储我提到的数据。
training_data.csv
-0.6508,1.0970,4.2009,-1
-1.4492,8.8960,4.4005,-1
2.0850,6.8760,12.0710,-1
.
.
.
数据.csv
-1,-3.665,620,5.9891
-1,-7.842,1.1267,5.5912
-1,3.012,5.611,5.8234
.
.
.
我无法获得超过 60% 的准确率。有人能告诉我我做对了吗?
Obs.:这是我的第一篇文章,所以也许我在问我的问题时犯了一些错误。
我试过用python实现Perceptron,但是精度不合理