python感知机:怎么解决这个报错呢?

新手上路,请多包涵

`import pandas as pd
import numpy as np
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
from sklearn import datasets

def data_pro(x, y):

x_end = preprocessing.scale(x)   #特征标准化
y_end = np.array([1 if i == 1 else -1 for i in y])    #将标签中的0替换为-1
return x_end, y_end

def data_split(x,y):

x_train,x_test,y_train,y_test=train_test_split(x,y,train_size=0.8,random_state=1234)
return x_train,x_test,y_train,y_test


def perceptron_model(x_train, y_train):

w = np.zeros(30)    #设置权重
b = 0               #设置偏置
lr = 0.1            #设置学习率
train_num = 1000000      #设置迭代次数
for d in range(train_num):
    X = x_train[d]
    y = y_train[d]
    if y * (np.dot(w, X.T) + b) <= 0:
        w = w + lr * np.dot(y, X)
        b = b + lr * y
return w, b

def test(w, b, x_test, y_test):

m = np.shape(x_test)
auc = 0
for i in range(m):
    classify = np.dot(x_test, w.T) + b
    if classify > 0:
        predict = 1
    else:
        predict = -1
    if predict == y_test[i]:
        auc += 1
print("正确率:%.2f%%"%(auc/m*100))

def main(x, y):

x_end, y_end = data_pro(x, y)
x_train, y_train, x_test, y_test = data_split(x_end, y_end)
w, b = perceptron_model(x_train, y_train)
test(w, b, x_test, y_test)  
                

if __name__=='__main__':

breast_cancer_data = datasets.load_breast_cancer()         
features = breast_cancer_data.data # 特征 
targets = breast_cancer_data.target # 类别  
print(main(features, targets))
`

if y * (np.dot(w, X.T) + b) <= 0这句总是会报错:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
想知道是为什么,该怎么解决呢?求好心人解答,谢谢!

阅读 1.3k
1 个回答

检查你的 ynp.dot(w, X.T) + b 的 shape,你这两者之一不是 scalar,shape 不同。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题