欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python离散建模之感知器学习算法

程序员文章站 2022-06-09 16:32:11
我们将研究一种判别式分类方法,其中直接学习评估 g(x)所需的 w 参数。我们将使用感知器学习算法。感知器学习算法很容易实现,但为了节省时间,我在下面为您提供了一个实现。该函数有几个输入:训练数据、训...

我们将研究一种判别式分类方法,其中直接学习评估 g(x)所需的 w 参数。我们将使用感知器学习算法。
感知器学习算法很容易实现,但为了节省时间,我在下面为您提供了一个实现。该函数有几个输入:训练数据、训练标签、对权重的初始猜测和学习率。注意,对于这两个类,类标签的值必须为+1和-1。

它将返回一个元组,其中包含:

  • 1.学习w参数
  • 2.执行的迭代次数
  • 3.错误分类的样本数

花些时间检查代码。如果不清楚每一行是如何工作的,不要担心,只要让你自己知道每一行的目的是什么就可以了。代码中有一些注释可以帮助大家。

def perce(x, y, w_init, rho, max_iter=1000):
    
    (n, nfeatures) = x.shape

    # augment the feature vectors by adding a 1 to each one. (see lecture notes)
    x = np.hstack((x, np.ones((n, 1))))
    nfeatures += 1

    w = w_init  # initialise weights
    iter = 0
    mis_class = n  # start by assuming all samples are misclassified

    while mis_class > 0 and iter < max_iter:
        iter += 1
        mis_class = 0
        gradient = np.zeros(nfeatures)  # initaliase the gradients to 0

        # loop over every training sample.
        for i in range(n):
            # each misclassified point will cause the gradient to change
            if np.inner(x[i, :], w) * y[i] <= 0:
                mis_class += 1
                gradient += -y[i] * x[i, :]
        # update the weight vector ready for the next iteration
        # note, also that the learning rate decays over time (rho/iter)
        w -= rho / iter * gradient

    return w, iter, mis_class

解释:

x-数据矩阵。每行代表一个单独的样本
y-与x-标签行对应的整数类标签的一维数组必须为+1或-1
w_init-初始权重向量
rho-标量学习率
最大迭代次数-最大迭代次数(默认为1000)

def perce_fast(x, y, w_init, rho, max_iter=10000):
  
    (n, nfeatures) = x.shape
    x = np.hstack((x, np.ones((n, 1))))
    nfeatures += 1
    w = w_init
    iter = 0
    mis_class = n
    yy = np.tile(y, (nfeatures, 1)).t
    while mis_class > 0 and iter < max_iter:
        iter += 1
        # compute set of misclassified points
        mc = (np.dot(x, w.transpose()) * y) <= 0
        mis_class = np.sum(mc)
        # update weights. note, the learning rate decays over time (rho/iter)
        w -= rho / iter * (np.sum(-yy[mc, :] * x[mc, :], axis=0))
    return w, iter, np.sum(mc)
  • 感知器算法的高效实现
  • 对于笔记本电脑数据,此版本的工作速度将提高x100!

到此这篇关于python离散建模之感知器学习算法的文章就介绍到这了,更多相关python感知器学习算法内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!