逻辑回归

函数原型为

sklearn.linear_model.LogisticRegression(...)

参数

  • penalty:一个字符串,指定了正则化策略

    • l2 优化目标函数为12∣∣ω∣∣22+CL(ω),C>0,L(ω)\frac{1}{2}||\pmb{\omega}||_2^2 +CL(\pmb \omega),C>0,L(\pmb \omega)21​∣∣ωωω∣∣22​+CL(ωωω),C>0,L(ωωω)为极大似然函数
    • l1 优化目标函数为∣∣ω∣∣1+CL(ω)||\pmb \omega ||_1 +CL(\pmb \omega)∣∣ωωω∣∣1​+CL(ωωω)
  • dual:是否求解对偶形式

  • C:一个浮点数,表示惩罚项系数的倒数,越小表示正则项越大

  • fit_intercept:是否计算b值

  • intercept_scaling:一个浮点数,只有当solver=‘liblinear’才有意义

  • class_weight:一个字典或者字符串‘balanced’

    • 如果为字典,则字典给每个分类的权值
    • 如果为balanced, 则每个分类的权重与该分类在样本集中出现的频率成反比
    • 如果没有指定,则权重为1
  • solver:一个字符串,指定了求解最优化问题的算法

    • newton-cg 使用牛顿法

    • lbfgs 使用L-BFGS拟牛顿法

    • liblinear 使用liblinear

    • sag 使用Stochastic Average Gradient descent算法

      注意:

    • 对于规模较小的数据集,liblinear比较合适,对于较大的数据集,sag比较合适

    • 其余的只处理penalty=‘l2’的情况

  • multi_class:一个字符串,指定对分类问题的策略

    • ovr 采用one-vs-rest策略
    • multinomial 直接采用多分类逻辑回归策略
  • verbose 一个证书3,用于开启/关闭迭代中间输出日志功能

方法

  • predict_log_proba(X) 返回一个数组,数组的元素依次是X预测为各个类别的概率的对数值
  • predict_porba(X) 返回一个数组,数组的元素依次是X预测为各个类别的概率值

选用的数据集为鸢尾花数据一共有150数据,这些数据分为3类(setosa,versicolor,virginica),每类50个数据,每个数据包含4个属性:萼片(sepal)长度,萼片宽度,花瓣(petal)长度,花瓣宽度。

导入数据

import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model, discriminant_analysis, model_selectiondef load_data():iris = datasets.load_iris()X_train = iris.data y_train = iris.targetreturn model_selection.train_test_split(X_train,y_train,test_size=0.25,random_state=0,stratify=y_train)

调用LogisticRegression函数

def test_LogisticRegression(*data):X_train,X_test, y_train, y_test = dataregr = linear_model.LogisticRegression()regr.fit(X_train,y_train)print("Coefficients:%s\n intercept %s"%(regr.coef_, regr.intercept_))print("Score: %.2f" %(regr.score(X_test,y_test)))

结果

Coefficients:[[ 0.38705175  1.35839989 -2.12059692 -0.95444452][ 0.23787852 -1.36235758  0.5982662  -1.26506299][-1.50915807 -1.29436243  2.14148142  2.29611791]]intercept [ 0.23950369  1.14559506 -1.0941717 ]
Score: 0.97

多分类参数对分类结果的影响,默认的采用的是one-vs-rest策略,但是回归模型原生就支持多分类。

def test_LogisticRegression_multinomial(*data):X_train,X_test, y_train, y_test = dataregr = linear_model.LogisticRegression(multi_class='multinomial', solver='lbfgs')regr.fit(X_train,y_train)print("Coefficients:%s\n intercept %s"%(regr.coef_, regr.intercept_))print("Score: %.2f" %(regr.score(X_test,y_test)))

牛顿法或拟牛顿法才能配合multi_class=‘multinomial’,否则报错

结果

Coefficients:[[-0.38340846  0.86187824 -2.27003634 -0.9744431 ][ 0.34360292 -0.37876116 -0.03099424 -0.86880637][ 0.03980554 -0.48311708  2.30103059  1.84324947]]intercept [  8.75830949   2.49431233 -11.25262182]
Score: 1.00

准确率达到了100%

最后看C对分类模型预测性能的影响

def test_LogisticRegression_C(*data):X_train,X_test, y_train, y_test = dataCs = np.logspace(-2,4,num=100)scores = []for C in Cs:regr = linear_model.LogisticRegression(C=C)regr.fit(X_train,y_train)scores.append(regr.score(X_test,y_test)) # 绘图fig = plt.figure()ax = fig.add_subplot(1,1,1)ax.plot(Cs,scores)ax.set_xlabel(r"C")ax.set_ylabel(r"score")ax.set_xscale("log")ax.set_title("LogisticRegression")plt.show()


随着C的增大,预测的准确率在上升,在一定的程度,预测维持在较高的水准保持不变

线性判别分析

函数原型

class sklearn.discriminant_analysis.LinearDiscriminantAnalysis()

参数

  • solver 一个字符串,指定求解最优化问题的算法

    • svd 奇异值分解,对于大规模特征的数据,推荐使用这种算法
    • lsqr 最小平方差算法,可以结合skrinkage参数
    • eigen 特征值分解算法 可以结合skrinkage参数
  • skrinkage 字符串‘auto’或浮点数或None,该参数通常在训练样本数量小于特征数量的场合下使用
    • auto 根据Ledoit-Wolf 引理来自动决定skrinkage参数大小
    • None 不使用skrinkage参数
    • 浮点数 指定skrinkage 参数
  • priors 一个数组,数组中元素依次制定了每个类别的先验概率,如果为None,则每个类的先验概率是相同的
  • n_components 降维后的维度
  • store_covariance 一个布尔值,表示是否需要额外计算每个类别的协方差矩阵

属性:

  • covariance : 一个数组,依次给出每个类别的协方差矩阵
  • means_ 依次给出每个类别的均值向量
  • xbar_ 给出了整体样本的均值向量
def test_LinearDiscriminantAnalysis(*data):X_train,X_test, y_train, y_test = datalda = discriminant_analysis.LinearDiscriminantAnalysis()lda.fit(X_train,y_train)print("Coefficients:%s\n intercept %s"%(lda.coef_, lda.intercept_))print("Score: %.2f" %(lda.score(X_test,y_test)))

结果是

Coefficients:[[  6.66775427   9.63817442 -14.4828516  -20.9501241 ][ -2.00416487  -3.51569814   4.27687513   2.44146469][ -4.54086336  -5.96135848   9.93739814  18.02158943]]intercept [-15.46769144   0.60345075 -30.41543234]
Score: 1.00

预测准确率为1.00 说明LinearDiscriminantAnalysis()对于测试集完全正确。

现在可视化一下降维后的数据集

def plot_LDA(converted_X,y):from mpl_toolkits.mplot3d import Axes3Dfig = plt.figure()ax = Axes3D(fig)colors = 'rgb'markers = 'o*s'for target , color,marker in zip([0,1,2],colors,markers):pos = (y==target).ravel()X=converted_X[pos,:]ax.scatter(X[:,0],X[:,1],X[:,2],color=color,marker = marker, label="Label %d"%target)ax.legend(loc="best")fig.suptitle("Iris After LDA")plt.show()
X_train ,X_test,y_train,y_test = load_data()
X = np.vstack((X_train,X_test))
Y = np.vstack((y_train.reshape(y_train.size,1),y_test.reshape(y_test.size,1)))
lda = discriminant_analysis.LinearDiscriminantAnalysis()
lda.fit(X,Y)
converted_X = np.dot(X,np.transpose(lda.coef_))+lda.intercept_
plot_LDA(converted_X,Y)

结果如下


接下来看不同的solver对预测性能的影响

def test_LinearDiscriminantAnalysis_solver(*data):X_train,X_test, y_train, y_test = datasolvers = ['svd','lsqr','eigen']for solver in solvers:if (solver == 'svd'):lda = discriminant_analysis.LinearDiscriminantAnalysis(solver=solver)else :lds = discriminant_analysis.LinearDiscriminantAnalysis(solver=solver, shrinkage=None)lda.fit(X_train,y_train)print("Score at solver=%s: %.2f"%(solver, lda.score(X_test,y_test)))

结果

Score at solver=svd: 1.00
Score at solver=lsqr: 1.00
Score at solver=eigen: 1.00

最后考察在solver=lsqr,引入抖动相当于引入正则化项

机器学习实战——逻辑回归和线性判别分析相关推荐

  1. 机器学习实战-逻辑回归-19

    机器学习实战-逻辑回归-用户流失预测 import numpy as np train_data = np.genfromtxt('Churn-Modelling.csv',delimiter=',' ...

  2. 数据分享|R语言逻辑回归、线性判别分析LDA、GAM、MARS、KNN、QDA、决策树、随机森林、SVM分类葡萄酒交叉验证ROC...

    全文链接:http://tecdat.cn/?p=27384 在本文中,数据包含有关葡萄牙"Vinho Verde"葡萄酒的信息(点击文末"阅读原文"获取完整代 ...

  3. R语言惩罚逻辑回归、线性判别分析LDA、广义加性模型GAM、多元自适应回归样条MARS、KNN、二次判别分析QDA、决策树、随机森林、支持向量机SVM分类优质劣质葡萄酒十折交叉验证和ROC可视化

    最近我们被客户要求撰写关于葡萄酒的研究报告,包括一些图形和统计输出. 介绍 数据包含有关葡萄牙"Vinho Verde"葡萄酒的信息.该数据集有1599个观测值和12个变量,分别是 ...

  4. 机器学习实战 | 逻辑回归应用之“Kaggle泰坦尼克之灾”

  5. 【机器学习】逻辑回归(LogisticRegression)原理与实战

    文章目录 前言 一.什么是逻辑回归 1.1 逻辑回归基础概念 1.2 逻辑回归核心概念 二.逻辑回归Demo 2.1 数据准备 2.2 创建逻辑回归分类器 2.3 分类器预测 三.逻辑回归实战 3.1 ...

  6. 机器学习_2逻辑回归

    机器学习_逻辑回归 分类问题 二分类--Sigmoid函数 Sigmoid函数代码实现 逻辑回归 数学原理 求解方式 正则化 逻辑回归数据集应用样例--代码实现 样例1:有清晰的线性决策边界 决策边界 ...

  7. 机器学习实战--Logistic回归与实例:从疝病症预测病马的死亡率

    声明 本文参考了<机器学习实战>书中代码,结合该书讲解,并加之自己的理解和阐述 机器学习实战系列博文 机器学习实战--k近邻算法改进约会网站的配对效果 机器学习实战--决策树的构建.画图与 ...

  8. 机器学习:逻辑回归(logistics regression)

    title: 机器学习:逻辑回归(logistics regression) date: 2019-11-30 20:55:06 mathjax: true categories: 机器学习 tags ...

  9. 传统机器学习之逻辑回归的分类预测,以威斯康辛州乳腺癌数据集为例

    传统机器学习之逻辑回归的分类预测,以威斯康辛州乳腺癌数据集为例 文章目录 传统机器学习之逻辑回归的分类预测,以威斯康辛州乳腺癌数据集为例 1导入基本库 2读取数据并且变换类型 3输出数据 4可视化数据 ...

  10. woe分析_机器学习-谈谈逻辑回归里面的woe化-20170911

    1.woe是什么东西 如果有人接触过信用评分卡,那么肯定是有看过在变量处理那一步,有一个变量woe的过程.那么woe是如何计算的呢,有什么具体含义呢. woe全称是Weight of Evidence ...

最新文章

  1. Ubuntu 9.04安设教程(傻瓜版)
  2. 牛客网_PAT乙级_1029有几个PAT(25)【输入字符串并strlen计算长度】
  3. 3-4 网络编程 练习题
  4. Java Web应用小案例:猜数小游戏
  5. 如何优雅的对列表接口进行分页?
  6. Ubuntu16.04下安装opencv-3.3.0
  7. java爱心效果代码来了
  8. Termux中proot-distro安装备份还原linux发行版笔记
  9. 以太坊parity安装
  10. 【UVM实战】第二章:一个简单的UVM验证平台(4)UVM 的终极大作:sequence
  11. 2022年油猴(tampermonkey)超简单安装
  12. python学生成绩排序_学生成绩排序基础算法笔记
  13. 腾讯高级数据分析师采访2
  14. SQLMap使用|命令大全(干货)
  15. 组网技术期末预习/复习总结
  16. python操作数据库工具类
  17. 星际争霸1终于可以在win10上运行了
  18. jquery 同源下载图片到本地
  19. 入门51单片机(STC8952RC)定时器、有关中断原理简述、寄存器设置与程序示例(包括流水灯和计时器)
  20. Visual Studio 2022

热门文章

  1. 你有哪些独到的识人技巧?
  2. ppt图片特效 c语言实现,用了这么久的PPT,才知道PPT可以一键生成特效图片!太好看了...
  3. 有益视力的食疗方法(转载)
  4. c语言不用加号怎么算加法,加法
  5. html5打开新标签,[HTML5] 新标签解释及用法
  6. BZOJ3772精神污染
  7. db服务器在游戏服务器组中的作用
  8. IJCAI2021强化学习相关论文集合推荐
  9. Personalized Defect Prediction
  10. 用JAVA时间类计算今天到指定日期的天数统计