机器学习第一篇----感知机

《统计学习方法》看到第三遍,准备给大家分享一下感悟,已经一些算法的代码实现

首先来看下《统计学习方法》对感知机的定义
机器学习第一篇----感知机_第1张图片

其实我们想象一下,就是一条线(直线<线性可分>,曲线都可以<非线性可分>),把空间一分为二,很容易理解。
f(x) 是一个激励函数,经过拟合的参数w,b计算,输入的x,然后就可以将X的空间分为{+1,-1}。

但是w,b什么时候达到最优呢?看下面的算法:
机器学习第一篇----感知机_第2张图片

注意:yi 在程序中是update = self.eta * (yi - self.predict(xi)) 做的,其实每次都是更新两个步长,比如eta设置为0.01 则更新的实际更新的时候是0.02
程序如下

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):
        """
        拟合函数
        :param X:training sets
        :param y:training labels
        :return:self
        """
        self.wb = np.zeros(1 + X.shape[1])
        self.errors_ = [] 
        for _ in range(self.n_iter):
            errors = 0
            for xi, yi in zip(X, y):
                update = self.eta * (yi - self.predict(xi)) 
                # 如果预测对了,w和b 不更新,如果预测的不对,则更新
                self.wb[1:] += update * xi  # 更新w的值
                self.wb[0] += update  # 更新b的值
                errors += int(update != 0.0)
            self.errors_.append(errors)
        return self

    def net_input(self, xi):
        """
        :param xi:
        :return:输出预测值(拟合值)
        """
        return np.dot(xi, self.wb[1:]) + self.wb[0]

    def predict(self, xi):
        """
        :param xi:
        :return:-1 or 1
        """
        return np.where(self.net_input(xi) <= 0.0, -1, 1)

参考文献:
《统计学习方法》
《python 机器学习》

你可能感兴趣的:(机器学习,NLP)