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&AdalineGD:基于iris莺尾花数据集利用Perceptron感知机和AdalineGD算法实现二分类

DL之Perceptron&AdalineGD:基于iris莺尾花数据集利用Perceptron感知机和AdalineGD算法实现二分类

DL之Perceptron&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)


上一篇:HTTP报文是什么样子的?


下一篇:java基础/数据加解密(Mooc)