-
import numpy as np class Perceptron(object): """ eta:学习率 n_iter:权重向量的训练次数 w_:神经分叉权重向量 errors_:用于记录神经元判断出错次数 """ def __init__(self,eta=0.01,n_iter=10): self.eta=eta; self.n_iter=n_iter pass def fit(self,x,y): """ 输入训练数据,培训神经元,x输入样本向量,y对应样本分类 x:shapep[n_samples,n_features] x:[[1,2,3],[4,5,6]] n_samples:2 n_features:3 y:[1,-1] """ """ 初始化权重向量为0 加一是因为前面算法提到的w0,也就是步调函数阈值 """ self.w_=np.zero(1+x.shape[1]); self.errors_=[]; pass查看全部
-
老师没有把代码贴出来,光看老师讲映像不够深刻,还是要自己动手。同学把自己整理的代码贴出来给大家看看:
查看全部 -
for _ in range(self.n_iter): errors = 0 """ x::[[1,2,3],[4,5,6]] y[1,-1] zip(X,y) = [[1,2,3 1],[4,5,6 -1]] """ for xi,trage in zip(X,y): """ update = n * (y-y') """ update = self.eta * (traget - self.predict(xi)) """ xi是一个向量 update * xi 等价: {W(1) = X[1]*update, W(2) = X[2]*update, W(3) = X[3]*update} """ self.w[1:] += update * xi pass self.w_[0] += update; pass pass def net_input(self, x): """ z = W0*1+W1*X1 + ...+Wn*Xn """ return np.dot(X, self.w_[1:]) + self.w_[0] pass def predict(self, X): return np.where[self.net_input(X) >= 0.0 : 1, -1] pass pass查看全部
-
机器学习中用于对数据进行分类的算法:1.感知器。2.适应性的线性神经元。
激活函数(也叫单元步调函数)
机器学习的本质是模拟人的神经元对信息的处理方法。根据神经学的研究,神经元可以看做是一个简单的带有二进制输出功能的逻辑电路门。
查看全部 -
from matplotlib.colors import ListedColormap def plot_decision_region(X, y, classifier, resolution=0.02): marker = ('s', 'x', 'o', 'v') colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan') cmap = ListColormap(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() # 将np.arange()中的向量扩展成一个矩阵 ''' xx1: a = np.arange(x1_min, x1_max, resolution) 向量元素为185个 xx1[255, 185],将a中的元素作为一行,重复255行 xx2: b = np.arange(x2_min, x2_max, resolution) 向量元素为255个 xx2[255, 185],将b中的元素作为一列,重复185列 ''' xx1, xx2 = np.mesbgrid(np.arange(x1_min, x1_max, resolution), np.arrange(x2_min, x2_max, resolution))
查看全部 -
import numpy as np class Perceptron(object): def __init__(self, eta = 0.01, n_iter = 10): self.eta = eta self.n_iter = n_iter def fit(self, X, y): self.w_ = np.zero(1 + X.shape[1]) self.error_ = [] for _ in range(self.n_iter): errors = 0 ''' X:[[1, 2, 3], [4, 5, 6] y:[1, -1] zip(X, y):[[1, 2, 3, 1]. [4, 5, 6, -1]] ''' for xi, target in zip(X, y): ''' update = n * (y - y') ''' update = self.eta * (target - self.predict(xi)) ''' xi是一个向量 update * xi等价于 [w1 = x1*update, w2 = x2*update, ......] ''' self.w_[1:] += update * xi self.w_[0] += update errors += int(update != 0.0) self.errors_.append(errors) def net_input(self, X): ''' z = w0*1 + w1*x1 + w2*x2 +..... np.dot()是做点积 ''' 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)
查看全部 -
import numpy as np class Perceptron(object): ''' eta:学习率 n_iter:权重向量的训练次数 w_:神经分叉权重向量 errors_:用于记录神经元判断出错次数 ''' def __init__(self, eta = 0.01, n_iter = 10); self.eta = eta self,n_iter = n_iter def fit(self, X, y): ''' 输入训练数据,培训神经元 X是输入样本向量,y是对应的样本分类 X:shape[n_samples, n_features] X:[[1, 2, 3], [4, 5, 6]] n_samples: 2 n_features: 3 y:[1, -1] ''' #初始化权重向量为0,加1是因为提到的w0,即步调函数的阈值 self.w_ = np.zero(1 + X.shape[1]) self.errora_ = []
查看全部 -
x(j)电信号
当感知器计算出错误的分类,才需要调整权重W(j)
W(j)模型自动改进
η需要使用者根据具体的使用场景,基于经验来调整
查看全部 -
步调函数(激活)与阈值
查看全部 -
感知器数据分类算法步骤
查看全部 -
X = np.array X:shape[n_samples , n_features] X:[ [1 , 2 , 3] , [4 , 5 , 6] ] n_samples : 2 n_features : 3 X.shape[1]就是X的n_samples值,值为2。
查看全部 -
import numpy as np
class perceptron(object):
'''
eta:学习率
n_iter:权重向量的训练次数
w_:神经分叉权重向量 w处理输入x
errors_:用于记录神经元判断出错次数
'''
def _int_(self,eat=0.01,n_iter=10):
self.eat=eat;
self.n_iter=n_iter;
pass
def fit(self,X,y):
"""
输入训练数据,培训神经元,X是输入的训练样本,y是对样本的正确分类
X:shape[n_samples,n_features]
n_samples:几组数据。n_features:有多少个神经分叉。
X[[1,2,3],[4,5,6]]
n_samples:2
n_features:3
y:[1,-1]
"""
'''
初始化权重向量为0
w_:是一个一位数组,代表每个神经纤维的权重向量
X.shape[1]:在计算有几个神经纤维
加一是因为前面算法提到的w0,也就是步调函数的阈值
开始的时候阈值 塞它=w0 用w0保存
'''
self.w_=np.zero(1+X.shape[1]);
self.errors=[];
for _ in range(self.n_iter):
error=0;
'''
X[[1,2,3],[4,5,6]]
y:[1,-1]
zip(X,y)=[[1,2,3,1],[4,5,6,-1]]
'''
for xi,target in zip(X,y):
'''
target:每组数据,一个个神经元 判断的正确值标准值
update=学习率*(y-y')
'''
update=self.eta*(target-self.predict(xi))
'''
predict:函数,是用来根据每个神经元输入的一组数据得到自己判断的结果
xi 是一个向量
update*xi等价:
[的它w(1)=x[1]*update,的它w(2)=x[2]*update,的它w(3)=x[3]*update,]
'''
self.w_[1:] +=update*xi
self.w_[0] +=update;
errors += int(update != 0.0)
self.errors_append(errors)
pass
pass
def net_input(self,x):
'''
完成神经元对输入信号的处理(加权点乘)
'''
return np.dot(X , self.w_[1:] + self.w_[0])
pass
def predict(self,x):
'''
加权点乘后用于与阈值判断
'''
return np.where(self.net_input(X) >= 0.0 , 1 , -1)
pass
pass
查看全部 -
感知器算法 试用范围:
Linearly separable 线性可分割 √
Not linearly separable 线性不可分割的 ×
查看全部 -
iris数据集:
5.1 3.5 1.4 0.2 Iris-setosa 4.9 3 1.4 0.2 Iris-setosa 4.7 3.2 1.3 0.2 Iris-setosa 4.6 3.1 1.5 0.2 Iris-setosa 5 3.6 1.4 0.2 Iris-setosa 5.4 3.9 1.7 0.4 Iris-setosa 4.6 3.4 1.4 0.3 Iris-setosa 5 3.4 1.5 0.2 Iris-setosa 4.4 2.9 1.4 0.2 Iris-setosa 4.9 3.1 1.5 0.1 Iris-setosa 5.4 3.7 1.5 0.2 Iris-setosa 4.8 3.4 1.6 0.2 Iris-setosa 4.8 3 1.4 0.1 Iris-setosa 4.3 3 1.1 0.1 Iris-setosa 5.8 4 1.2 0.2 Iris-setosa 5.7 4.4 1.5 0.4 Iris-setosa 5.4 3.9 1.3 0.4 Iris-setosa 5.1 3.5 1.4 0.3 Iris-setosa 5.7 3.8 1.7 0.3 Iris-setosa 5.1 3.8 1.5 0.3 Iris-setosa 5.4 3.4 1.7 0.2 Iris-setosa 5.1 3.7 1.5 0.4 Iris-setosa 4.6 3.6 1 0.2 Iris-setosa 5.1 3.3 1.7 0.5 Iris-setosa 4.8 3.4 1.9 0.2 Iris-setosa 5 3 1.6 0.2 Iris-setosa 5 3.4 1.6 0.4 Iris-setosa 5.2 3.5 1.5 0.2 Iris-setosa 5.2 3.4 1.4 0.2 Iris-setosa 4.7 3.2 1.6 0.2 Iris-setosa 4.8 3.1 1.6 0.2 Iris-setosa 5.4 3.4 1.5 0.4 Iris-setosa 5.2 4.1 1.5 0.1 Iris-setosa 5.5 4.2 1.4 0.2 Iris-setosa 4.9 3.1 1.5 0.1 Iris-setosa 5 3.2 1.2 0.2 Iris-setosa 5.5 3.5 1.3 0.2 Iris-setosa 4.9 3.1 1.5 0.1 Iris-setosa 4.4 3 1.3 0.2 Iris-setosa 5.1 3.4 1.5 0.2 Iris-setosa 5 3.5 1.3 0.3 Iris-setosa 4.5 2.3 1.3 0.3 Iris-setosa 4.4 3.2 1.3 0.2 Iris-setosa 5 3.5 1.6 0.6 Iris-setosa 5.1 3.8 1.9 0.4 Iris-setosa 4.8 3 1.4 0.3 Iris-setosa 5.1 3.8 1.6 0.2 Iris-setosa 4.6 3.2 1.4 0.2 Iris-setosa 5.3 3.7 1.5 0.2 Iris-setosa 5 3.3 1.4 0.2 Iris-setosa 7 3.2 4.7 1.4 Iris-versicolor 6.4 3.2 4.5 1.5 Iris-versicolor 6.9 3.1 4.9 1.5 Iris-versicolor 5.5 2.3 4 1.3 Iris-versicolor 6.5 2.8 4.6 1.5 Iris-versicolor 5.7 2.8 4.5 1.3 Iris-versicolor 6.3 3.3 4.7 1.6 Iris-versicolor 4.9 2.4 3.3 1 Iris-versicolor 6.6 2.9 4.6 1.3 Iris-versicolor 5.2 2.7 3.9 1.4 Iris-versicolor 5 2 3.5 1 Iris-versicolor 5.9 3 4.2 1.5 Iris-versicolor 6 2.2 4 1 Iris-versicolor 6.1 2.9 4.7 1.4 Iris-versicolor 5.6 2.9 3.6 1.3 Iris-versicolor 6.7 3.1 4.4 1.4 Iris-versicolor 5.6 3 4.5 1.5 Iris-versicolor 5.8 2.7 4.1 1 Iris-versicolor 6.2 2.2 4.5 1.5 Iris-versicolor 5.6 2.5 3.9 1.1 Iris-versicolor 5.9 3.2 4.8 1.8 Iris-versicolor 6.1 2.8 4 1.3 Iris-versicolor 6.3 2.5 4.9 1.5 Iris-versicolor 6.1 2.8 4.7 1.2 Iris-versicolor 6.4 2.9 4.3 1.3 Iris-versicolor 6.6 3 4.4 1.4 Iris-versicolor 6.8 2.8 4.8 1.4 Iris-versicolor 6.7 3 5 1.7 Iris-versicolor 6 2.9 4.5 1.5 Iris-versicolor 5.7 2.6 3.5 1 Iris-versicolor 5.5 2.4 3.8 1.1 Iris-versicolor 5.5 2.4 3.7 1 Iris-versicolor 5.8 2.7 3.9 1.2 Iris-versicolor 6 2.7 5.1 1.6 Iris-versicolor 5.4 3 4.5 1.5 Iris-versicolor 6 3.4 4.5 1.6 Iris-versicolor 6.7 3.1 4.7 1.5 Iris-versicolor 6.3 2.3 4.4 1.3 Iris-versicolor 5.6 3 4.1 1.3 Iris-versicolor 5.5 2.5 4 1.3 Iris-versicolor 5.5 2.6 4.4 1.2 Iris-versicolor 6.1 3 4.6 1.4 Iris-versicolor 5.8 2.6 4 1.2 Iris-versicolor 5 2.3 3.3 1 Iris-versicolor 5.6 2.7 4.2 1.3 Iris-versicolor 5.7 3 4.2 1.2 Iris-versicolor 5.7 2.9 4.2 1.3 Iris-versicolor 6.2 2.9 4.3 1.3 Iris-versicolor 5.1 2.5 3 1.1 Iris-versicolor 5.7 2.8 4.1 1.3 Iris-versicolor 6.3 3.3 6 2.5 Iris-virginica 5.8 2.7 5.1 1.9 Iris-virginica 7.1 3 5.9 2.1 Iris-virginica 6.3 2.9 5.6 1.8 Iris-virginica 6.5 3 5.8 2.2 Iris-virginica 7.6 3 6.6 2.1 Iris-virginica 4.9 2.5 4.5 1.7 Iris-virginica 7.3 2.9 6.3 1.8 Iris-virginica 6.7 2.5 5.8 1.8 Iris-virginica 7.2 3.6 6.1 2.5 Iris-virginica 6.5 3.2 5.1 2 Iris-virginica 6.4 2.7 5.3 1.9 Iris-virginica 6.8 3 5.5 2.1 Iris-virginica 5.7 2.5 5 2 Iris-virginica 5.8 2.8 5.1 2.4 Iris-virginica 6.4 3.2 5.3 2.3 Iris-virginica 6.5 3 5.5 1.8 Iris-virginica 7.7 3.8 6.7 2.2 Iris-virginica 7.7 2.6 6.9 2.3 Iris-virginica 6 2.2 5 1.5 Iris-virginica 6.9 3.2 5.7 2.3 Iris-virginica 5.6 2.8 4.9 2 Iris-virginica 7.7 2.8 6.7 2 Iris-virginica 6.3 2.7 4.9 1.8 Iris-virginica 6.7 3.3 5.7 2.1 Iris-virginica 7.2 3.2 6 1.8 Iris-virginica 6.2 2.8 4.8 1.8 Iris-virginica 6.1 3 4.9 1.8 Iris-virginica 6.4 2.8 5.6 2.1 Iris-virginica 7.2 3 5.8 1.6 Iris-virginica 7.4 2.8 6.1 1.9 Iris-virginica 7.9 3.8 6.4 2 Iris-virginica 6.4 2.8 5.6 2.2 Iris-virginica 6.3 2.8 5.1 1.5 Iris-virginica 6.1 2.6 5.6 1.4 Iris-virginica 7.7 3 6.1 2.3 Iris-virginica 6.3 3.4 5.6 2.4 Iris-virginica 6.4 3.1 5.5 1.8 Iris-virginica 6 3 4.8 1.8 Iris-virginica 6.9 3.1 5.4 2.1 Iris-virginica 6.7 3.1 5.6 2.4 Iris-virginica 6.9 3.1 5.1 2.3 Iris-virginica 5.8 2.7 5.1 1.9 Iris-virginica 6.8 3.2 5.9 2.3 Iris-virginica 6.7 3.3 5.7 2.5 Iris-virginica 6.7 3 5.2 2.3 Iris-virginica 6.3 2.5 5 1.9 Iris-virginica 6.5 3 5.2 2 Iris-virginica 6.2 3.4 5.4 2.3 Iris-virginica 5.9 3 5.1 1.8 Iris-virginica 查看全部 -
基本按着老师的写的,能出图~ 笔记字数有限制,代码分了几部分,注释参考老师的讲解。 (第1段) # -*- coding: utf-8 -*- import numpy as np class Perceptron(object): def __init__(self, eta = 0.01, n_iter=10): self.eta = eta; self.n_iter = n_iter; pass def fit(self, X, y): self.w_ = np.zeros(1 + X.shape[1]); self.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) pass pass pass def net_input(self, X): return np.dot(X, self.w_[1:]) + self.w_[0] pass def predict(self, X): return np.where(self.net_input(X) >= 0.0 , 1, -1) pass pass查看全部
举报