zoukankan      html  css  js  c++  java
  • 逻辑回归、正则化、感知机

    逻辑回归、正则化、感知机

    正则化

    为避免过拟合,增强模型的泛化能力,可以使用正则化的方法。

    1. Lasso回归--L1正则化

      [J( heta)=frac{1}{2n}(mathtt X heta-Y)^T(mathtt X heta-Y)+alphalVert heta Vert_1 ]

      (alpha)为常数系数,需要进行调优,(lVert heta Vert_1为)(L_1)范数。

    2. Ridge回归--L2正则化

      [J( heta)=frac{1}{2}(mathtt X heta-Y)^T(mathtt X heta-Y)+frac{1}{2}alphalVert heta Vert_2^2 ]

      (alpha)为常数系数,需要进行调优,(lVert heta Vert_2^2)(L_2)范数。

    使用scikit-learn运行Ridge回归

    ridge = Ridge(alpha=1)
    ridge.fit(X_train,y_train)
    print(ridge.coef_) #打印模型参数
    print(ridge.intercept_)
    

    使用scikit-learn研究超参数(alpha)和回归系数( heta)的关系

    alphas = np.logspace(-10,-2,200) #生成200个alpha在10的-10次方到-2次方之间
    clf = linear_model.Ridge(fit_intercept=False)
    coefs = []
    for a in alphas:
        clf.set_params(alpha=a)
        clf.fit(X,y)
        codefs.append(clf.coef_)#将参数保存
    

    (alpha)越大,那么正则项惩罚越厉害,得到的回归系数( heta)就越小,最终趋近于0;

    (alpha)越小,那么正则项惩罚越小,得到的回归系数( heta)就越接近普通的线性回归系数。

    逻辑回归

    1. 逻辑回归是一个分类的算法。

      对于离散型的数据,如何进行分类,对于输入向量X,构建函数(g(mathtt X))使得其值落于某个区间内的话就分为A类,否则分为B类,这就是最基本的用逻辑回归做二分类的思想。这个函数g我们经常使用sigmoid函数,具有较好的性质。

      [g(z)=frac{1}{1+e^{-z}}\ h_ heta(x)=frac{1}{1+e^{-x heta}}\ h_ heta(mathtt X)=frac{1}{1+e^{-X heta}} ]

    2. 逻辑回归的损失函数

      逻辑回归的损失函数经常使用极大似然函数表示,并对其取对数。

      [L( heta)=prod_{i=1}^{m}(h_ heta(x^{(i)}))^{y^{(i)}}(1-h_ heta(x^{(i)}))^{1-y^{(i)}}\ J( heta)=-lnL( heta)=-sum_{i=1}^{m}(y^{(i)}log(h_ heta(x^{(i)}))+(1-y^{(i)})log(1-h_ heta(x^{(i)})))\ J( heta)=-mathtt Y^Tlog h_ heta(mathtt X)-(mathtt E-mathtt Y)^Tlog(mathtt E-h_ heta(mathtt X)) ]

    3. 逻辑回归优化方法

      [ heta= heta-alpha X^T(h_ heta(X)-Y) ]

    4. 推广到多元逻辑回归

      某种类型为正值,其他为0,这种方法被称为one-vs-rest,简称OvR;

      选择两部分的样本分别做逻辑回归,称为Many-vs-Many,简称MvM;

      二元逻辑回归的概率表示如下:

      [P(y=1|x, heta)=h_ heta(x)=frac{1}{1+e^{-x heta}}=frac{e^{x heta}}{1+e^{x heta}}\ P(y=0|x, heta)=1-h_ heta(x)=frac{1}{1+e^{x heta}}\ ]

      其中,y只能取0和1,推广到多分类问题,使用softmax函数

      [P(y=k|x, heta)=frac{e^{x heta_k}}{1+sum_{t=1}^{K-1}e^{x heta_t}}quad k=1,2,...,K-1\ P(y=K|x, heta)=frac{1}{1+sum_{t=1}^{K-1}e^{x heta_t}}\ ]

    scikit-learn逻辑回归库使用

    1. 常用的类

      LogisticRegression

      LogisticRegressionCV:使用了交叉验证来选择正则化参数C

      logistic_regression_path:主要是为了选择模型时使用,确定回归系数和正则化参数。

    2. 正则化参数penalty

      penalty的值可以是l1或者l2,分别对应L1和L2正则化,默认是L2。一般选择L2就够了,如果还是过拟合,即预测效果差的情况,可以选择L1。如果模型特征非常多,希望一些不重要的参数系数归零,从而使模型系数称稀疏化,也可使用L1正则化。

      penalty会影响损失函数的优化算法,即solver选择,如果L2则solver可以选择以下四种:newtow-cg、lbfgs、linear、sag,如果是L1,只能选择linear,因为L1正则化loss函数不是连续可导的。

    3. 优化算法参数solver

      newtow-cg、lbfgs、linear、sag

    4. 分类方法选择参数multi_class

      ovr和multinomial

    5. 类型权重参数class_weight

      用于标示分类模型各种类型的权重,解决“误分类代价很高”和“样本高度失衡”的问题。

    6. 样本权重参数sample_weight

      解决样本失衡问题。

    from sklearn.model_selection import GridSearchCV
    from sklearn.linear_model import LogisticRegression
    from sklearn.learning_curve import learning_curve
    
    param_LR = {'C': [0.1, 1, 2]}
    gsearch_LR = GridSearchCV(estimator=LogisticRegression(penalty='l1',solver='liblinear'),
                              param_grid=param_LR, cv=3)
    

    感知机模型

    1. 模型概念

      感知机模型是存在一个超平面(sum_{i=0}^m heta_ix_i=0),能够将数据完全分开,定义为:(y=sign( hetacdot x))其中:

      [sing(x)= egin{cases} -1quad xlt0\ 1quad xge0 end{cases} ]

    2. 损失函数

      期望所有的样本到超平面的距离之和最小,点到超平面的距离为(frac{-y^{(i)} hetacdot x^{(i)}}{lVert heta Vert^2}),其中(lVert heta Vert_2)为L2范数。所有点到超平面的距离之和为(frac{-sum_{x_iin M}y^{(i)} hetacdot x^{(i)}}{lVert heta Vert_2}),可以简化为

      [J( heta)=-sum_{x_iin M}y^{(i)} hetacdot x^{(i)} ]

    3. 损失函数的优化方法

      一般采用梯度下降法进行优化

    4. 感知机模型是支持向量机、神经网络等算法的鼻祖

  • 相关阅读:
    安装HyperV后VirtualBox打开故障
    TortoiseGit或TortoiseSVN在软件或系统更新后图标丢失的一个解决办法
    WSL2 Ubuntu1604 安装 GUI图形库 和 Qt Creator
    时序约束(小梅哥)
    FPGA加速
    吴恩达机器学习笔记
    Neural Network and Deep Learning 笔记【第二章;反向传播算法如何⼯作】
    Tcl学习记录
    Neural Network and Deep Learning 笔记【第一章;手写数字识别】
    操作符重载
  • 原文地址:https://www.cnblogs.com/guesswhy/p/12882850.html
Copyright © 2011-2022 走看看