[学习笔记]适应行线性神经元基本原理
1.学习笔记来源https://www.imooc.com/video/14384Demo下载https://github.com/sufadi/SimpleNeuronNetworkDemo2.自适应线性神经元数位动态调整数据参数,让实际结果和预测结果动态调整,让其更加准确3.和方差公式不断调整w参数,使得输入数据j(w)最小,这样预测数据就越精确
·
1.学习笔记来源
https://www.imooc.com/video/14384
Demo下载
https://github.com/sufadi/SimpleNeuronNetworkDemo
2.自适应线性神经元
数位动态调整数据参数,让实际结果和预测结果动态调整,让其更加准确
3.和方差公式
不断调整w参数,使得输入数据j(w)最小,这样预测数据就越精确
4.渐进下降法
Jw 作一个偏导数Gradinet,如果切线斜率是正,减少斜率则Jmin越小。
- 斜率 > 0, 减小神经元数值
- 斜率 < 0, 增大神经元数值
j(w)最小,这样预测数据就越精确
5.和方差求偏导数
6.神经元参数更新
统计学的公式
7.相应代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import numpy as np
'''
适应性神经元
'''
class AdalineGD(object):
'''
eta : 学习效率,取值范围[0,1]
n_iter: 对训练数据进行学习改进次数
w:一维向量,存储权重数值
error_:存储每次迭代改进时,网络对数据进行错误判断的次数
'''
def __init__(self, eta=0.01, n_iter=50):
self.eta = eta
self.n_iter = n_iter
def fit(self, X, y):
'''
X : 二维数组 [n_smapls, n_features]
n_smapls 表示 X 中含有的训练数据条目数
n_features 含有4个数据的一维向量,用于表示一条训练条目
y : 一维向量,用于存储每一条训练条目对应的正确分类
'''
# 初始化权重向量为0
self.w_ = np.zeros(1 + X.shape[1])
# 用于得到改进后的值,判断改进的效果多大
self.const_ = []
for i in range(self.n_iter):
# output = w0 + w1*x1 + ... + wn*xn
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(X)
def predict(self, X):
return np.where(self.activation(X) >= 0, 1, -1)
8.图形化显示
# 初始化神经网络对象,其中学习率越小和迭代的次数越多,预测的权重越精确
ada = AdalineGD(eta=0.0001, n_iter=50)
# 加载数据原料
import pandas as pd
import numpy as np
# 数据可视化展示
import matplotlib.pyplot as plt
file = "D:/EclipseProject/PythonStudyBySu/su/iris.data.csv"
# 无文件头
df = pd.read_csv(file, header=None)
# 抽取出第0和2列的数据
X = df.iloc[0:100, [0, 2]].values
y = df.loc[0:99, 4].values
y = np.where(y == "Iris-setosa", -1, 1)
ada.fix(X, y)
plot_decision_regions(X, y, classifier=ada)
plt.title("Adline")
plt.xlabel("x")
plt.ylabel("y")
plt.legend(loc='upper left')
plt.show()
# 错误判断的统计次数
plt.plot(range(1, len(ada.cost_) + 1), ada.cost_, marker='o')
plt.xlabel("error_x")
plt.ylabel("error_y")
plt.show()
9.运行结果
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献3条内容
所有评论(0)