统计学习方法学习笔记1——感知机模型

1.感知机学习算法的原始形式

  • 输入:训练数据集T={(x1,y1),(x2,y2),...,(xn,yn)},其中xi属于R,yi属于{+1,-1},i=1,2,...,n;学习率h(0
  • 输出:w,b;感知机模型f(x)=sign(w*x+b)

    • 1、选取初值w0,b0;
    • 2、在训练数据集中选取数据(xi,yi):
    • 3、如果yi(w*xi+b)<=0:
        w <-- w + h*yi*xi
        b <-- b + h*yi
      
    • 4、转至-2,直至训练集中没有误分类点

python实现感知机模型原始形式:

 

def perceptron_model(train_datas, train_labels, h, iters=100):
    # 1.初始化权值参数w0 和偏置b0
    w = np.array([0., 0.])
    b = 0.
    for iter_ in range(iters):
        for x,y in zip(train_datas, train_labels):
            if y*(np.dot(w, x)+b)<=0:
                w=w+h*y*x
                b=b+h*y
    print('w:', w)
    print('b:', b)
    return w, b
def sk_percetron_model(train_datas, train_labels):
    model = Perceptron(n_iter = 40, eta0 = 0.01, random_state = 1)
    model.fit(train_datas, train_labels)
    #得到训练结果,权重矩阵
    print('w',model.coef_)
    #超平面的截距
    print('b',model.intercept_)
    return model.coef_, model.intercept_
train_data = [[3, 3], [4, 3], [1, 1]]
train_label = [1, 1, -1]
train_datas = np.array(train_data)
train_labels = np.array(train_label)
w, b = perceptron_model(train_datas, train_labels, 0.001)
w_, b_ = sk_percetron_model(train_datas, train_labels)
plot_model(w_[0], b_, train_datas, train_labels)
plot_model(w, b, train_datas, train_labels)
w: [0.001 0.001]
b: -0.003
w [[0.01 0.01]]
b [-0.03]

统计学习方法学习笔记1——感知机模型_第1张图片

感知机模型的假设空间为:函数集合—{f|f(x)=wx+b}
模型的复杂度主要体现在模型参数w上,而w的规模取决于输入数据特征的数量,故模型的复杂度间接体现在输入特征的数量上。如果是多层感知机,还取决于感知机的层数,这个时候就要考虑模型的结构风险,防止过拟合的现象出现,尽可能加入正则化。

 

 

你可能感兴趣的:(机器学习,机器学习,统计学习方法笔记)