天天看點

DL之Perceptron&AdalineGD:基于iris莺尾花資料集利用Perceptron感覺機和AdalineGD算法實作二分類

設計思路

DL之Perceptron&AdalineGD:基于iris莺尾花資料集利用Perceptron感覺機和AdalineGD算法實作二分類

輸出結果

<bound method DataFrame.info of      SepalLength_cm  SepalWidth_cm  ...  PetalWidth_cm           label

0               5.1            3.5  ...            0.2     Iris-setosa

1               4.9            3.0  ...            0.2     Iris-setosa

2               4.7            3.2  ...            0.2     Iris-setosa

3               4.6            3.1  ...            0.2     Iris-setosa

4               5.0            3.6  ...            0.2     Iris-setosa

..              ...            ...  ...            ...             ...

145             6.7            3.0  ...            2.3  Iris-virginica

146             6.3            2.5  ...            1.9  Iris-virginica

147             6.5            3.0  ...            2.0  Iris-virginica

148             6.2            3.4  ...            2.3  Iris-virginica

149             5.9            3.0  ...            1.8  Iris-virginica

[150 rows x 5 columns]>

  SepalLength_cm  SepalWidth_cm  ...  PetalWidth_cm            label

0             5.0            3.5  ...            0.3      Iris-setosa

1             6.3            2.5  ...            1.9   Iris-virginica

2             4.4            3.0  ...            0.2      Iris-setosa

3             5.7            2.8  ...            1.3  Iris-versicolor

4             6.8            3.2  ...            2.3   Iris-virginica

[5 rows x 5 columns]

Iris-setosa        50

Iris-versicolor    50

Iris-virginica     50

Name: label, dtype: int64

(150, 2)

[5, 0, 0, 0, 0, 0, 0, 0, 0, 0]

CE_res (37, 0, 0, 0)

recall   precision   accurency

1.0 1.0 1.0

DL之Perceptron&amp;AdalineGD:基于iris莺尾花資料集利用Perceptron感覺機和AdalineGD算法實作二分類
DL之Perceptron&amp;AdalineGD:基于iris莺尾花資料集利用Perceptron感覺機和AdalineGD算法實作二分類
DL之Perceptron&amp;AdalineGD:基于iris莺尾花資料集利用Perceptron感覺機和AdalineGD算法實作二分類

核心代碼

class Perceptron(object):

  def __init__(self, rate = 0.01, niter = 10):

     self.rate = rate

     self.niter = niter

  def fit(self, X, y):

     self.weight = np.zeros(1 + X.shape[1])

     self.errors = []  # Number of misclassifications

     for i in range(self.niter):

        err = 0

        for xi, target in zip(X, y):

           delta_w= self.rate * (target-self.predict(xi))

           self.weight[1:] += delta_w * xi

           self.weight[0] += delta_w

           err += int(delta_w != 0.0)

        self.errors.append(err)

     return self

  def net_input(self, X):

     return np.dot(X, self.weight[1:]) + self.weight[0]

  def predict(self, X):

     return np.where(self.net_input(X) >= 0.0, 1, -1)

繼續閱讀