机器学习实战——逻辑回归和线性判别分析
逻辑回归
函数原型为
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
,引入抖动相当于引入正则化项
机器学习实战——逻辑回归和线性判别分析相关推荐
- 机器学习实战-逻辑回归-19
机器学习实战-逻辑回归-用户流失预测 import numpy as np train_data = np.genfromtxt('Churn-Modelling.csv',delimiter=',' ...
- 数据分享|R语言逻辑回归、线性判别分析LDA、GAM、MARS、KNN、QDA、决策树、随机森林、SVM分类葡萄酒交叉验证ROC...
全文链接:http://tecdat.cn/?p=27384 在本文中,数据包含有关葡萄牙"Vinho Verde"葡萄酒的信息(点击文末"阅读原文"获取完整代 ...
- R语言惩罚逻辑回归、线性判别分析LDA、广义加性模型GAM、多元自适应回归样条MARS、KNN、二次判别分析QDA、决策树、随机森林、支持向量机SVM分类优质劣质葡萄酒十折交叉验证和ROC可视化
最近我们被客户要求撰写关于葡萄酒的研究报告,包括一些图形和统计输出. 介绍 数据包含有关葡萄牙"Vinho Verde"葡萄酒的信息.该数据集有1599个观测值和12个变量,分别是 ...
- 机器学习实战 | 逻辑回归应用之“Kaggle泰坦尼克之灾”
- 【机器学习】逻辑回归(LogisticRegression)原理与实战
文章目录 前言 一.什么是逻辑回归 1.1 逻辑回归基础概念 1.2 逻辑回归核心概念 二.逻辑回归Demo 2.1 数据准备 2.2 创建逻辑回归分类器 2.3 分类器预测 三.逻辑回归实战 3.1 ...
- 机器学习_2逻辑回归
机器学习_逻辑回归 分类问题 二分类--Sigmoid函数 Sigmoid函数代码实现 逻辑回归 数学原理 求解方式 正则化 逻辑回归数据集应用样例--代码实现 样例1:有清晰的线性决策边界 决策边界 ...
- 机器学习实战--Logistic回归与实例:从疝病症预测病马的死亡率
声明 本文参考了<机器学习实战>书中代码,结合该书讲解,并加之自己的理解和阐述 机器学习实战系列博文 机器学习实战--k近邻算法改进约会网站的配对效果 机器学习实战--决策树的构建.画图与 ...
- 机器学习:逻辑回归(logistics regression)
title: 机器学习:逻辑回归(logistics regression) date: 2019-11-30 20:55:06 mathjax: true categories: 机器学习 tags ...
- 传统机器学习之逻辑回归的分类预测,以威斯康辛州乳腺癌数据集为例
传统机器学习之逻辑回归的分类预测,以威斯康辛州乳腺癌数据集为例 文章目录 传统机器学习之逻辑回归的分类预测,以威斯康辛州乳腺癌数据集为例 1导入基本库 2读取数据并且变换类型 3输出数据 4可视化数据 ...
- woe分析_机器学习-谈谈逻辑回归里面的woe化-20170911
1.woe是什么东西 如果有人接触过信用评分卡,那么肯定是有看过在变量处理那一步,有一个变量woe的过程.那么woe是如何计算的呢,有什么具体含义呢. woe全称是Weight of Evidence ...
最新文章
- Ubuntu 9.04安设教程(傻瓜版)
- 牛客网_PAT乙级_1029有几个PAT(25)【输入字符串并strlen计算长度】
- 3-4 网络编程 练习题
- Java Web应用小案例:猜数小游戏
- 如何优雅的对列表接口进行分页?
- Ubuntu16.04下安装opencv-3.3.0
- java爱心效果代码来了
- Termux中proot-distro安装备份还原linux发行版笔记
- 以太坊parity安装
- 【UVM实战】第二章:一个简单的UVM验证平台(4)UVM 的终极大作:sequence
- 2022年油猴(tampermonkey)超简单安装
- python学生成绩排序_学生成绩排序基础算法笔记
- 腾讯高级数据分析师采访2
- SQLMap使用|命令大全(干货)
- 组网技术期末预习/复习总结
- python操作数据库工具类
- 星际争霸1终于可以在win10上运行了
- jquery 同源下载图片到本地
- 入门51单片机(STC8952RC)定时器、有关中断原理简述、寄存器设置与程序示例(包括流水灯和计时器)
- Visual Studio 2022