Простая модель персептрона в python - PullRequest
0 голосов
/ 07 мая 2020

Я получаю ошибку этого типа, когда запускаю функцию соответствия. Многие говорят, что он работает в python 2.7. Я хочу узнать, как это сделать в python 3. Есть ли другие способы сделать это?

class Perceptron:

    def __init__(self):
        self.w=None
        self.b=None

    def model(self,x):
        return 1 if (np.dot(self.w,x)>=self.b) else 0

    def predict(self,X):
        Y=[]
        for x in X:
            result = self.model(x)
            Y.append(result)
        return np.array(Y)

    def fit(self, X, Y, epochs = 1, lr=1):
        self.w = np.ones(X.shape[1])
        self.b = 0

        accuracy = {}
        max_accuracy = 0

        wt_matrix = []

        for i in range(epochs):
            for x, y in zip(X,Y):
                y_pred = self.model(x)
                if y==1 and y_pred == 0:
                    self.w = self.w +lr* x
                    self.b = self.b + lr*1
                elif y==0 and y_pred== 1:
                    self.w = self.w-lr*x
                    self.b = self.b-lr*1
            wt_matrix.append(self.w)
            accuracy[i] =  accuracy_score(self.predict(X),Y)
            if(accuracy[i]>max_accuracy):
                max_accuracy = accuracy[i]
                chkptw=self.w
                chkptb=self.b
        self.w =chkptw
        self.b=chkptb

        print(max_accuracy)



        plt.plot(accuracy.values())
        plt.ylim([0,1])
        plt.show   

        return np.array(wt_matrix) 

Это код:

wt_matrix = perceptron.fit(X_train,Y_train,100)

и когда я звоню функция, отображающая эту ошибку типа

TypeError                                 Traceback (most recent call last)
<ipython-input-76-8b850a516f0e> in <module>()

----> 1 wt_matrix = perceptron.fit(X_train,Y_train,100)


8 frames

/usr/local/lib/python3.6/dist-packages/numpy/core/_asarray.py in asarray(a, dtype, order)
     83 
     84     """
---> 85     return array(a, dtype, copy=False, order=order)
     86 
     87 

TypeError: float() argument must be a string or a number, not 'dict_values'

1 Ответ

1 голос
/ 07 мая 2020

Это простая задача приведения типов. Измените

plt.plot(accuracy.values())

на

plt.plot(list(accuracy.values()))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...