你代码写错了
w[0]其实就是bias, net_input(x)的结果就是最终样本权值计算的结果,predict就是作者说的激活函数,函数的y值是[-1,1]
self.errors就是每个实例所对应的属性
for _ in range(self.n_iter):
errors = 0
按住shift,然后按三下引号就行了!
errors+=np.where(update==0.0,1,-1)和 errors+=int(update!=0.0)不一样 (update!=0.0)只有0和1两种取值
下面的你的代码我理解不清楚,所以我是觉得可能是这个地方错误,仅供参考
这句代码的作用就是让这个神经网络训练n_iter次,变量_只是这里的临时变量,其作用类似于for(i=0;i<10;i++)里面i的作用。
搜狗输入法有
Xi还是xi?要与前面的代码【for xi, target in zip(X, y)】中的xi相一致。
这个是缩进错误
```
import numpy as np
class perceptron(object):
"""
eta :学习率
n_iter: 权重向量的训练次数
w_: 神经分叉权重向量
errors_: 用于记录神经元判断出错次数
"""
def _int_(self,eta=0.01,n_iter=10):
self.eta=eta;
self.n_iter=n_iter;
pass
def fit(self,x,y):
"""
输入训练数据,培训神经元,x输入样本向量,y对应样本分类
x:shape[n_samples,n_features]
x:[[1,2,3],[4,5,6]]
n_samples: 2 (输入样本量)
n_features:3 (输入的信号有多少个)
y:[1,-1]
"""
"""
初始化权重向量为0
"""
self.w_=np.zero(1+x.shape[1]);
self.errors_=[]
"""
训练次数循环
"""
for _ in range(self.n_iter):
errors =0
"""
x:[[1,2,3],[4,5,6]]
y:[1,-1]
zip(x,y)=[[1,2,3,1],[4,5,6,-1]]
"""
for xi,target in zip(x,y):
"""
update=η*(y-y')
"""
update =self.eta*(target-self.predict(xi))
"""
xi 是一个向量
self.w_[1:]+=update*xi等价:
[▽w(1)=x[1]*update,▽w(2)=x[2]*update,▽w(3)=x[3]*update,]
"""
self.w_[1:]+=update*xi
self.w_[0]+=update;
errors+=int(update !=0.0)
self.errors_.appand(errors)
pass
pass
def net_input(self,x):
"""
z= W0*1+ W1*X1+ ....Wn*Xn
"""
return np.dot(x,self.w_[1:])+self.w_[0]
pass
def predict(self,x):
return np.where(self,net_input(x)>=0.0,1,-1)
pass
```
冒号是错的,只有逗号,老师后来更正了
anaconda软件
self没有定义,你少抄了
def __init__(self, eta=0.01, n_iter=10):
self.eta = eta
self.n_iter = n_iter
那是因为函数 predict()的定义在fit()定义后边了,你把net_input()和predict()的定义放到fit()之前就OK了
zip是一个函数将y填充到X中
for循环正常循环啊
和for i in range(10) 一样的
老师用的是3.。。前面老师用print()
np.zeros才对,x是数组所以有shape属性
可以啊
不可能,但是可以区分两个图形,就是特别简单的那种
我觉得是可以的,因为那一句没起作用。
用键盘打:“dao'san'jiao"在提示里面就出来了‘