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

    xiaoxiao2023-10-02  159

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

    输入:训练数据集T={(x1,y1),(x2,y2),...,(xn,yn)},其中xi属于R,yi属于{+1,-1},i=1,2,...,n;学习率h(0<h=<1)

    输出: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]

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

     

     

    最新回复(0)