感知机


#返回目录


感知机

  • 目录
    • 模型介绍
    • 梯度下降法原理和代码
    • sklearn实现


模型介绍

感知机

随机梯度下降算法

作用 : 求解 w, b .

  • 原理

  • 代码
  #进行iter次迭代计算
    for k in range(iter):
        #对于每一个样本进行梯度下降
        #李航书中在2.3.1开头部分使用的梯度下降,是全部样本都算一遍以后,统一
        #进行一次梯度下降
        #在2.3.1的后半部分可以看到(例如公式2.6 2.7),求和符号没有了,此时用
        #的是随机梯度下降,即计算一个样本就针对该样本进行一次梯度下降。
        #两者的差异各有千秋,但较为常用的是随机梯度下降。
        for i in range(m):
            #获取当前样本的向量
            xi = dataMat[i]
            #获取当前样本所对应的标签
            yi = labelMat[i]
            #判断是否是误分类样本
            #误分类样本特诊为: -yi(w*xi+b)>=0,详细可参考书中2.2.2小节
            #在书的公式中写的是>0,实际上如果=0,说明改点在超平面上,也是不正确的
            if -1 * yi * (w * xi.T + b) >= 0:
                #对于误分类样本,进行梯度下降,更新w和b
                w = w + h *  yi * xi
                b = b + h * yi
        #打印训练进度
        print('Round %d:%d training' % (k, iter))
sklearn实现

clf = classifier的缩写

from sklearn.datasets import load_digits
from sklearn.linear_model import Perceptron
X, y = load_digits(return_X_y=True)
clf = Perceptron(tol=1e-3, random_state=0)
clf.fit(X, y)
a = clf.score(X, y)

print(a)
  • 自写代码

    信息特征数,冗余特征数,参考矩阵的秩

from sklearn.datasets import make_classification
from sklearn.linear_model import Perceptron
from sklearn.model_selection import train_test_split
from matplotlib import pyplot as plt
import numpy as np

n_samples = 1000
n_features = 2
random_state = 0

x,y = make_classification(n_samples=n_samples, n_features=n_features,
                                                    n_redundant=0,n_informative=1,n_clusters_per_class=1, 
                                                    random_state=random_state)
#n_samples:生成样本的数量
#n_features=2:生成样本的特征数,特征数=n_informative() + n_redundant + n_repeated
#n_informative:多信息特征的个数
#n_redundant:冗余信息,informative特征的随机线性组合
#n_clusters_per_class :某一个类别是由几个cluster构成的

#训练数据和测试数据
X_train,X_test, y_train, y_test = train_test_split(x,y,test_size=0.2, random_state=0)

#正例和反例
positive_x1 = [x[i,0] for i in range(1000) if y[i] == 1]
positive_x2 = [x[i,1] for i in range(1000) if y[i] == 1]
negetive_x1 = [x[i,0] for i in range(1000) if y[i] == 0]
negetive_x2 = [x[i,1] for i in range(1000) if y[i] == 0]
#定义感知机
clf = Perceptron(fit_intercept=False,shuffle=False)
#使用训练数据进行训练
clf.fit(X_train,y_train)
#得到训练结果,权重矩阵
print(clf.coef_)
#输出为:[[1.71768691 3.53606653]]
#超平面的截距,此处输出为:[0.]
print(clf.intercept_)
#利用测试数据进行验证
acc = clf.score(X_test,y_test)
print(acc)
#画出正例和反例的散点图
plt.scatter(positive_x1,positive_x2,c='red')
plt.scatter(negetive_x1,negetive_x2,c='blue')
#画出超平面(在本例中即是一条直线)
line_x = np.arange(-4,4)
line_y = line_x * (-clf.coef_[0][0] / clf.coef_[0][1]) - clf.intercept_
plt.plot(line_x,line_y)
plt.show()


文章作者: Jerry
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明来源 Jerry !
 上一篇
逻辑斯蒂模型 逻辑斯蒂模型
#返回目录 逻辑斯蒂 目录 模型介绍 条件概率模型 sklearn实现 模型介绍 逻辑斯蒂 条件概率模型 作用 :1.解决极小距离差别带来的+1和-1的天壤之别2.预测式子可微 原理 代码 预测函数,从之前的si
下一篇 
灰度预测 灰度预测
来源:灰度预测 1.灰色系统的定义:灰色系统指既含有已知信息又含有未知信息的系统。 2.灰色预测模型的定义:对灰色系统进行预测的模型。灰色模型(Grey Model,简称GM模型)一般表达方式为GM(n,x)模型,其含义是:用n阶微分方程对
2020-06-06
  目录