为了账号安全,请及时绑定邮箱和手机立即绑定
  • 自适应线性神经元的分类算法

    class AdalineGD(object):
        def __init__(self, eta=0.1, n_iter=50):
            self.eta = eta
            self.n_iter = n_iter
        def fit(self, X, y): #与感知器最大的不同
            self.w_ = np.zeros(1 + X.shape[1])
            self.cost_ = [] #成本函数:判断改进效果,使其不断减小
            for i in range(self.n_iter):
                output = self.net_input(X)
                errors = y - output
                self.w_[1:] += self.eta * X.T.dot(errors)
                self.w_[0] += self.eta * errors.sum()
                cost = (errors ** 2).sum()/2.0
                self.cost_.append(cost)
            return self
        def net_input(self, X):
            return np.dot(X, self.w_[1:] + self.w_[0])
        def activation(self, X):
            return self.net_input(self, X):
        def predict(self, X):
            return np.where(self.activation(X) >= 0, 1, -1)
    
    #运行算法               
    ada = AdalineGD(eta=0.0001, n_iter=50) #学习率越低,每次权重的改进越精确;迭代次数越大,优化的结果越准确。
    ada.fit(X, y)
    plot_decision_regions(X, y, classifier=ada) #预测数据输入到神经网络后预测
    plt.title('Adaline-Gradient descent')
    plt.xlabel('花茎长度')
    plt.ylabel('花瓣长度')
    plt.legend(loc='upper left')
    plt.show()
    
    plt.plot(range(1, len(ada.cost_)+1), ada.cost_, marker='o') #检测改进效果
    plt.xlabel('Epochs') #自我迭代的学习次数
    plt.ylabel('sum-squard-error') #做出错误判断的次数
    查看全部
  • 感知器的激活函数是步调函数,当输入数据大于阈值-->1,小于阈值-->0.

    自适应线性神经元的激活函数是直接将输入数据与参数相乘后求和:w0+x1w1+x2w2+……,并且会将计算结果与输入结果进行比较,若不一致,会根据给定结果动态调整参数-->渐进下降法。

    渐进下降法:

    和方差函数(U型),当函数对w求偏导后得到的切线斜率小于0(大于0)-->增大(减小)相应神经元参数w值


    查看全部
  • 数据解析和可视化

    import pandas as pd
    import matplotlib.pyplot as plt
    import numpy as np
    
    df = pd.read_csv(file, header=None)
    y = df.loc[0:100, 4].values
    y = np.where(y == 'Iris-setosa', -1, 1)
    X = df.iloc[0:100, [0, 2]].values
    plt.scatter(X[:50, 0], X[:50, 1], color='red', marker='o', label='setosa')
    plt.scatter(X[50:100, 0], X[50:100, 1], color='blue', marker='x', label='versicolor')
    plt.xlabel('花瓣长度')
    plt.ylabel('花茎长度')
    plt.legend(loc='upper left')
    plt.show()

    数据分类(将预测的数据输入到神经网络中,以图形方式绘制)

    from matplotlib.colors import ListedColormap
    def plot_decision_regions(X, y, classifier, resolution=0.02):
        marker = ('s', 'x', 'o', 'v')
        colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')
        cmap = ListedColormap(colors[:len(np.unique(y))])
        x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max()
        x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max()
        #将x1、x2最大最小值通过arange函数得到的向量,扩展成两个二维矩阵
        xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution), np.arange(x2_min, x2_max, resolution))
        #预测
        Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T) #ravel还原成单维向量
        #绘制
        Z= Z.reshape(xx1.shape) #将Z转换成与xx1一样的二维数组
        plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=cmap) #在两组分类结果中间画分割线-->必须线性可分
        plt.xlim(xx1.min(), xx1.max())
        plt.ylim(xx2.min(), xx2.max())
        for idx, cl in enumerate(np.unique(y)):
            plt.scatter(x=X[y==cl, 0], y=X[y==cl, 1], alpha=0.8, c=cmap(idx), marker=markers[idx], label=cl)
    查看全部
  • 感知器的分类算法

    import numpy as mp
    class Perception(objet):
        def __init__(self, eta=0.01, n_ier=10): #eta学习率,n_iter训练权重向量的重复次数
            self.eta = eta
            self.n_iter = n_iter
        #根据输入样本培训神经元,X:shape[n_sample, n_feature], n_feature指神经元接收的电信号X数量
        def fit(self, X, y): 
            self.w_ = np.zero(1+X.shape[1]) #初始权重向量w_为0,括号里加一是包括激励函数的阈值w0
            self.errors_ = [] #errors_用于记录神经元判断出错次数,是个队列
            
            for _ in range(self.n_iter):
                errors = 0
                for xi, target in zip(X, y):
                    #权重更新
                    update = self.eta * (target - self.predict(xi))
                    self.w_[1:] += update * xi
                    #阈值更新
                    self.w_[0] += update
                    
                    errors += int(update != 0.0)
                    self.errors_.append(errors)
             
            def net_input(self, X): #输入电信号X与权重w的点积
                return np.dot(X, self.w_[1:]) + self.w_[0]
                
            def predict(self, X): #预测分类
                return np.where(self.net_input(X) >= 0.0, 1, -1)


    查看全部
  • 感知器算法:要求数据线性可分

    查看全部
  • 自适应线性神经元

    查看全部
  • 神经元的数学表示

    激活函数

    向量的转置与乘积的表达式

    查看全部
  • 课程大纲

    查看全部
    0 采集 收起 来源:课程的开篇词

    2018-04-19

  • 算法步骤总结

    查看全部
  • 感知器数据分类算法步骤

    查看全部
  • 更新权重

    查看全部
  • 权重更新算法示例2

    查看全部
  • 权重更新算法示例2

    查看全部
  • 权重更新算法示例

    查看全部
  • 权重更新算法

    查看全部

举报

0/150
提交
取消
课程须知
有一定的编程基础,例如掌握C语言。
老师告诉你能学到什么?
1、机器学习的基本概念介绍 2、数据分类算法介绍 3、神经元感知器分类算法并进行实现 4、数据解析和可视化设计 5、使用数据训练神经网络 6、如何使用训练后的神经网络分类数据 7、适应性线性神经元的基本原理并实现 8、适应性线性神经元网络进行数据分类

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!