machine-learning - 感知器算法没有按我的意愿工作
问题描述
我最近尝试实现感知器算法,但没有得到想要的输出。
这是代码:
import numpy as np
import pandas as pd
with open("D:/data.txt",'r') as data: #importing the data
column = data.read()
split = np.array(column.split('\n'))
final =[]
for string in split:
final.append(string.split(','))
df = pd.DataFrame(final,columns=['x','y','response'])
df['x'] = df['x'].astype(float)
df['y'] = df['y'].astype(float)
df['response'] = df['response'].astype(int)
X = np.array(df[['x','y']])
y = np.array(df['response'])
def perceptron_algorithm(x,y,learning_rate=0.01,num_epoch=25):
np.random.seed(2)
x_min, x_max = min(x.T[0]), max(x.T[0])
y_min, y_max = min(x.T[1]), max(x.T[0])
w = np.array(np.random.rand(2,1))
b = np.random.rand(1)[0] + x_max
print(w,b)
for i in range(num_epoch):
w,b = perceptronstep(x,y,w,b,learning_rate)
print(w,b)
return w,b
def perceptronstep(x,y,w,b,learning_rate):
for i in range(len(x)):
y_hat = prediction(x[i],w,b)
if y_hat-y[i] == 1:
for j in range(len(w)):
w[j] += x[i][j]*learning_rate
b += learning_rate
elif y_hat-y[i] == -1:
for j in range(len(w)):
w[j] -= x[i][j]*learning_rate
b -= learning_rate
return w,b
def prediction(x,w,b):
return step(np.matmul(x,w)+b)
def step(t):
if t >=0:
return 1
else:
return 0
w,b = perceptron_algorithm(X,y)
这是结果行:
这是数据的外观:
我的代码有问题吗?
这是数据文件的链接:
https://drive.google.com/drive/folders/1TSug9tE6bljyBFv-u3mIGWW6F_3ZY2oa?usp=sharing
编辑:我已经添加了代码的初始部分,所以很清楚我想要做什么。
编辑 2:我添加了数据文件和“import pandas as pd”代码行
解决方案
推荐阅读
- css - 扩大jumbotron的高度以覆盖整个柱高
- ruby - 将对象数组添加到对象键后,哈希显示为空,即使元素可访问
- vba - 如何比较和突出一列中的字符串列表与excel中的另一列
- c# - 尝试将数据从actionmethod发送到mvc中的静态方法
- html - 如何避免框在悬停时移动?
- android - 我无法使用 Firebase 身份验证通过电子邮件和密码登录
- android - 从 Firebase 存储中删除图像时出错
- javascript - 如何附加由于函数而创建的元素?
- angular - angular 4 rerouting-component 不会重新加载
- php - 使用 .htaccess 删除 .php 扩展名会重复我的页面吗?