sklearn的逻辑回归

 官方逻辑回归链接

sklearn.linear_model.LogisticRegression — scikit-learn 1.0.2 documentationhttps://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression

一,参数说明

1.1重要参数solver(求解器)详解

该参数用于优化问题,达到线性收敛的结果,相当于对逻辑回归进行优化

该参数对应的选项有

{'newton-cg','lbfgs','liblinear','sag','saga'},默认 ='lbfgs'

newton-cg

传统的牛顿法是每一次迭代都要求Hessian矩阵的逆,这个复杂度就很高,为了避免求矩阵的逆,Newton-CG就用CG共轭梯度法来求解线性方程组,从而避免了求矩阵逆。

lbfgs

有限内存中进行BFGS算法

L-BFGS算法是一种在牛顿法基础上提出的一种求解函数根的算法

一文读懂L-BFGS算法_激进的蜗牛-CSDN博客_lbfgs接前一篇:逻辑回归(logistics regression) 本章我们来学习L-BFGS算法.L-BFGS是机器学习中解决函数最优化问题比较常用的手段,本文主要包括以下六部分: 1-L-BFGS算法简介 2-牛顿法求根问题 3-牛顿法求函数的驻点 4-...https://blog.csdn.net/weixin_39445556/article/details/84502260

L-BFGS剖析_golden_xuhaifeng的博客-CSDN博客_lbfgs    机器学习中经常利用梯度下降法求最优解问题,通过大量的迭代来得到最优解,但是对于维度较多的数据,除了占用大量的内存还会很耗时,L-BFGS算法是一种在牛顿法基础上提出的一种求解函数根的算法,下面由简入深尽量用简洁的语言剖析算法的本质。一.牛顿法    解决函数求根问题 f(x)函数在x1点的导数,是该函数在x1点的切线的斜率y/x,f(x1)=f(x1)/(x1-x2) ,x1-x3=f(x...https://blog.csdn.net/golden_xuhaifeng/article/details/79817330这两篇文章也讲述了牛顿法

liblinear

官方网站

LIBLINEAR -- A Library for Large Linear Classificationlogistic regression, support vector machines, linear classification, document classificationhttps://www.csie.ntu.edu.tw/~cjlin/liblinear/使用指南

https://www.csie.ntu.edu.tw/~cjlin/papers/liblinear.pdfhttps://www.csie.ntu.edu.tw/~cjlin/papers/liblinear.pdf是一个简单的解决大规模线性化分类和回归问题的软件包

是具有数百万个实例和特征的数据的线性分类器

sag

随机梯度下降算法

saga

SAGA算法是SAG算法的一个加速版本

如何区分两者

如何理解SAG,SVRG,SAGA三种优化算法 - 知乎最近在看Leon Bottou的大规模机器学习中的优化算法,发现里面有一些算法不太好理解,所以自己找了一些文章看了看,决定把SAG,SVRG,SAGA三种算法介绍一下。 对于这三种方法,我们主要目的是希望达到线性收敛的结果…https://zhuanlan.zhihu.com/p/51184012参数中与求解器(solver)相关的有

penalty,dual,intercept_scaling,max_iter

 1.2其他参数说明

参数参数说明
penalty

{'l1', 'l2', 'elasticnet', 'none'}, default='l2'

  • 'none':不加罚分;

  • 'l2': 添加一个 L2 惩罚项,它是默认选择;

  • 'l1':增加一个L1惩罚项;

  • 'elasticnet': L1 和 L2 惩罚项都被添加

警告

某些惩罚可能不适用于某些求解器。请参阅参数 solver(求解器),以了解惩罚和求解器之间的兼容性。

dual双重或原始配方。对偶公式仅适用于使用 liblinear 求解器的 l2 惩罚。当 n_samples > n_features 时首选 dual=False。
class_weight

dict or ‘balanced’, default=None

“balanced”模式使用 y 的值自动调整与输入数据中的类频率成反比的权重

如果指定了 sample_weight,这些权重将与 sample_weight(通过 fit 方法传递)相乘

max_iter

默认=100

求解器收敛的最大迭代次数

multi_class

{‘auto’, ‘ovr’, ‘multinomial’}, default=’auto’

如果选择的选项是“ovr”,那么每个标签都适合一个二元问题。

对于“多项式”,最小化的损失是拟合整个概率分布的多项式损失,即使数据是二元的

random_state

随机种子

solver== 'sag'、'saga' 或 'liblinear' 对数据进行洗牌时使用

solver{'newton-cg','lbfgs','liblinear','sag','saga'},默认 ='lbfgs'

对于是否再逻辑回归之前做归一化或者标准化

scaler = StandardScaler()
X_train = scaler.fit_transform(X)

逻辑回归模型中特征是否需要归一化? - 简书从前向过程来看:逻辑回归模型的输出是经过softmax的概率值,概率值的排序不受归一化的影响。从另一个角度来看,softmax其实也就实现了归一化的目的。 从反向过程来看:逻...https://www.jianshu.com/p/544c457a9947

二、优化方法(一下优化仅个人观点)

2.1方法一,使用自编代码求解权重,让后将权重作为参数传入

参数优化参考文献

数据挖掘经典算法:Logistic(逻辑回归) python和sklearn实现_昆兰.沃斯 的博客-CSDN博客_sklearn 逻辑回归Logistic虽然不是十大经典算法之一,但却是数据挖掘中常用的有力算法,所以这里也专门进行了学习,以下内容皆为亲自实践后的感悟和总结(Logistic原理、代码实现和优化、真实样例数据、sklearn实现)。为了记录的比较清楚,所以内容可能有点多,但都比较浅显,下面进入正文。(运算数据来自机器学习第5章)Logistic原理:大体的思路:为了实现Logistic回归分类器,我们可以在每个...https://blog.csdn.net/qq_36523839/article/details/81604217

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd# 读取文本数据,返回数据集和目标值
from sklearn import model_selection
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, roc_curve, auc
from sklearn.preprocessing import StandardScalerdef loadDataSet():dataMat = []labelMat = []fr = open('testSet.txt')for line in fr.readlines():lineArr = line.strip().split()# 该数据集中,添加了一列并初始化为1,便于后续的计算,但是在其他数据集中,一般没有必要添加dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])labelMat.append(int(lineArr[2]))return dataMat, labelMat# 运算的核心函数Sigmoid
def sigmoid(inX):return 1.0 / (1 + np.exp(-inX))def stocGradAscent0(dataMatrix, classLabels):dataMatrix = np.array(dataMatrix)    #将列表转换格式m,n = np.shape(dataMatrix)alpha = 0.01weights = np.ones(n)for i in range(m):h = sigmoid(sum(dataMatrix[i]*weights))error = classLabels[i] - hweights = weights + alpha * error * dataMatrix[i]return weightsdef stocGradAscent1(dataMatrix, classLabels, numIter=150):dataMatrix = np.array(dataMatrix)   #将列表转换格式m,n = np.shape(dataMatrix)weights = np.ones(n)for j in range(numIter):dataIndex = list(range(m))for i in range(m):alpha = 4/(1.0+j+i)+0.0001  #变化的alpharandIndex = int(np.random.uniform(0,len(dataIndex)))    #随机样本下标h = sigmoid(sum(dataMatrix[randIndex]*weights))error = classLabels[randIndex] - hweights = weights + alpha * error * dataMatrix[randIndex]del(dataIndex[randIndex])   #从整个数据中去除已经使用过的样本return weights# 核心函数alpha*gradient更新回归系数
def gradAscent(dataMatIn, classLabels):# 为了便于计算,mat将两个列表数据转换为numpy的数组dataMatrix = np.mat(dataMatIn)labelMat = np.mat(classLabels).transpose()  # transpose矩阵转置m, n = np.shape(dataMatrix)alpha = 0.001  # 设置步长maxCycles = 500  # 设置循环次数weights = np.ones((n, 1))  # 初始化每个特征的回归系数为1for k in range(maxCycles):# 得到每一行的sigmoid值 (两个相乘得到z值)h = sigmoid(dataMatrix * weights)  # 矩阵相乘 sigmoid(sum(每个特征*每个系数)) 行*列,由于是矩阵相乘,所以在相乘时便求和了# 用一直更新的回归系数求预测值,然后与真实值之间求误差,误差越来越小,则系数更新变化也越来越小,最后趋于稳定error = (labelMat - h)  # 每行分类与对应sigmoid相减 误差值越来越小了# 数据集转置*误差 每条样本*该样本的误差值weights = weights + alpha * dataMatrix.transpose() * errorreturn weights# 1.读取训练数据集
# 设置随机种子
random_state_model = 40
filepath = r"文件路径"
#特征因子个数
feature_number = 特征个数
data = pd.read_excel(filepath)  # reading file
data = np.array(data)
classifypointdata = data[:, 0:feature_number]
classifypointlabel = data[:, -1]scaler = StandardScaler()
classifypointdata = scaler.fit_transform(classifypointdata)
# 切分数据,固定随机种子(random_state)时,同样的代码,得到的训练集数据相同。
# 此处运行完的结果可能是string类型之后用于计算时记得类型转换
train_data, test_data, train_label, test_label = model_selection.train_test_split(classifypointdata, classifypointlabel, random_state=random_state_model,train_size=0.8, test_size=0.2)
train_data = np.array(train_data)
test_data = np.array(test_data)
train_label = np.array(train_label)
test_label = np.array(test_label)
#dataArr, labelMat = loadDataSet()
weights = gradAscent(train_data, train_label)
print(weights)
LC_model =  LogisticRegression(random_state=random_state_model,class_weight=weights)
LC_model.fit(train_data, train_label)
y_test_pred = LC_model.predict(test_data)
print("Accuracy %0.6f:" % (accuracy_score(test_label, y_test_pred)))
y_test_predict_proba = LC_model.predict_proba(test_data)[:, 1]
y_test_two_model = np.array(test_label, dtype=int)
test_fpr, test_tpr, test_thresholds = roc_curve(y_test_two_model, y_test_predict_proba, pos_label=1)
test_roc_auc = auc(test_fpr, test_tpr)
print("auc %0.6f:" % (test_roc_auc))

2.2方法二,综合以上基于求解器我们使用网格搜索进行参数优化,其主要是优化的参数是solver,penalty,max_iter

import pandas as pd
from sklearn import model_selection
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, roc_curve, auc
from sklearn.model_selection import GridSearchCV
from sklearn.preprocessing import StandardScaler
import numpy as np
# 1.读取训练数据集
# 设置随机种子
random_state_model = 40
filepath = r"文件路径"
#特征因子个数
feature_number = 因子个数/特征值数
data = pd.read_excel(filepath)  # reading file
data = np.array(data)
classifypointdata = data[:, 0:feature_number]
classifypointlabel = data[:, -1]
# 1.标准化处理
#标准差标准化(standardScale)使得经过处理的数据符合标准正态分布,即均值为0,标准差为1
#概念
#标准化:缩放和每个点都有关系,通过均值μ和标准差σ体现出来;输出范围是负无穷到正无穷
#优点
#提升模型的收敛速度
#提升模型的精度
#使用场景
#如果数据存在异常值和较多噪音,用标准化,可以间接通过中心化避免异常值和极端值的影响
scaler = StandardScaler()
classifypointdata = scaler.fit_transform(classifypointdata)
# 切分数据,固定随机种子(random_state)时,同样的代码,得到的训练集数据相同。
# 此处运行完的结果可能是string类型之后用于计算时记得类型转换
train_data, test_data, train_label, test_label = model_selection.train_test_split(classifypointdata, classifypointlabel, random_state=random_state_model,train_size=0.8, test_size=0.2)# 2.构建RF模型
#参数是基于个人数据优化的结果
LC_model =  LogisticRegression(random_state=random_state_model)
param_grid = [{'solver':['newton-cg'],'penalty':['l2','none'],'max_iter':[10,50,100,1000,2000]},{'solver':['lbfgs'],'penalty':['l2','none'],'max_iter':[10,50,100,1000,2000]},{'solver':['liblinear'],'penalty':['l2','l1'],'max_iter':[10,50,100,1000,2000]},{'solver':['sag'],'penalty':['l2','none'],'max_iter':[10,50,100,1000,2000]},{'solver':['saga'],'penalty':['l2','none','elasticnet','l1'],'max_iter':[10,50,100,1000,2000]}]
LC_GSC = GridSearchCV(LC_model, param_grid, cv=10)
LC_GSC.fit(train_data, train_label)
print(LC_GSC.best_params_)
print(LC_GSC.best_score_)
optimal_LC = LC_GSC.best_params_LC_model =  LogisticRegression(random_state=random_state_model,**optimal_LC)
LC_model.fit(train_data, train_label)y_test_pred = LC_model.predict(test_data)
print("Accuracy %0.6f:" % (accuracy_score(test_label, y_test_pred)))
y_test_predict_proba = LC_model.predict_proba(test_data)[:, 1]
y_test_two_model = np.array(test_label, dtype=int)
test_fpr, test_tpr, test_thresholds = roc_curve(y_test_two_model, y_test_predict_proba, pos_label=1)
test_roc_auc = auc(test_fpr, test_tpr)
print("auc %0.6f:" % (test_roc_auc))

2.3结果

两者的auc是相同的,准确率相差0.05,但是方法一只相当于方法二的一部分

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434939.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sklearn中的支持向量机SVC

官方链接 sklearn.svm.SVC — scikit-learn 1.0.2 documentationhttps://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC该方法是基于libsvm(支持向量机库)实现的 libsvm官网 LIBSVM -- A Library for Support Vec…

ArcGIS之GP服务发布

模型构建器官方解释: 链接 什么是模型构建器? 1.模型构建器是一个用来创建、编辑和管理模型的应用程序。模型是将一系列地理处理工具串联在一起的工作流,它将其中一个工具的输出作为另一个工具的输入。也可以将模型构建器看成是用于构建工…

卸载idea_IDEA 不为人知的 5 个骚技巧!真香!

来自公众号:Java中文社群工欲善其事,必先利其器,磊哥最近发现了几个特别棒的 IDEA“骚”技巧,已经迫不及待的想要分享给你了,快上车...1.快速补全行末分号使用快捷键 Shfit Ctrl Enter 轻松实现。2.自带的 HTTP 请求…

网格搜索支持向量机运行结束不了

from sklearn import svm, model_selection import pandas as pd import numpy as np #支持向量机主要调节的参数有:C、kernel、degree、gamma、coef0。 #C 默认 1.0正则化参数。 #kernel {‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’}, defaul…

arcgis矢量之间的空白如何快速填充

填充之前 中间有空白处需要填充完整(前提时候得是一个图层,如果是两个图层就无法填充) 点击开始编辑 点击创建要素 点击自动完成面 开始绘制 绘制完成如下

argis中4波段影像变3波段

解决方法:波段合成 4波段影像属性 工具 结果

python批量压缩图片

#coding:utf-8 from PIL import Image import os#图片压缩批处理 def compressImage(srcPath,dstPath):for filename in os.listdir(srcPath):#如果不存在目的目录则创建一个,保持层级结构if not os.path.exists(dstPath):os.makedirs(dstPath)#拼接完整的文件或文件…

arcgis坡度结果有误或z因子前有感叹号

在地理坐标系下我们做坡度的时候arcgis的z因子会出现感叹号 这样作出的效果如下 通常这样的效果是错误的 解决方法: 原理:应为在地理坐标系下xy的单位是度或者十进制的,就导致z与xy的测量单位不同,所有我们就需将DEM数据投影到投…

基于集成提升和 Bagging 的地下水潜力预测机器学习模型文件阅读

文章连接:Ensemble Boosting and Bagging Based Machine Learning Models for Groundwater Potential Prediction | SpringerLinkhttps://link.springer.com/article/10.1007/s11269-020-02704-3 一、研究区: Dezekord-Kamfiruz 流域是伊朗法尔斯省的一部分 二、方法:

SAGA-GIS软件下载

官网: SAGA - System for Automated Geoscientific Analyseshttps://saga-gis.sourceforge.io/en/index.html点击下载按钮 点击后等几秒即可下载 下载时间过长 下载完解压即可使用

使用优化的基于模糊规则的特征选择技术和基于树的集成方法进行山洪敏感性建模--文献阅读

文章连接 Flash flood susceptibility modeling using an optimized fuzzy rule based feature selection technique and tree based ensemble methods - ScienceDirecthttps://www.sciencedirect.com/science/article/pii/S0048969719309349?via%3Dihub#bb0310 解决问题 在…

Silverlight实例教程 - Out of Browser开篇

众所周知,学习一门IT技术,最关键的是实践,无论是软件开发还是网络调试,只要在真实环境下勤于动手和思考,很快就能掌握一门技术,Silverlight也不例外。为了帮助更多朋友快速学习掌握Silverlight应用开发&…

河流水质指标预测与不确定性分析:机器学习模型的比较研究--文献阅读

电导率 (EC)、氢气功率 (pH)、溶解氧 (DO)、总溶解固体 (TDS)、硫酸盐 (SO4)、镁 (Mg)、氯 (Cl)、总大肠菌群 (TC) 和生化需氧量 (BOD) DO、BOD、化学需氧量 (COD)、pH、硝酸盐 (NO3) 和悬浮固体 (SS)

可以无限增加iPhone 的图标吗?

可以无限增加iPhone 的图标吗?iPhone屏幕上每个图标都对应一个应用程序,目前苹果商店中应用程序数量已经超过40万个,我们又能在手机里放多少呢?有人可能会说那要取决于iPhone的存储容量有多大,确实如此,那么如果假设空…

在日本山区流域使用支持向量机和 bagging、boosting 和 stacking 集成机器学习框架改进滑坡评估--文献阅读

为了在基于过程的模型中准确表示边坡稳定性,有必要包含大量涉及滑坡几何形状和内部结构的局部特征的特征。这包括但不限于斜坡的分层和不连续性、运动裂缝、裂片、陡坡、地垒/地堑结构、降雨、空气和土壤温度、土壤水分含量、许多点的地下水位、地表和深度但是&…

AX 2009 界面伸缩功能

界面伸缩功能 在一个界面下,放置多个Grid之后,数据太多,要有个能推拉伸缩的功能,如下图: 中间横条可以上下拉动,折叠处可以关闭显示整个Grid 横条要代码实现,折叠只要设置一下Group就行。 纵向空…

使用增强回归树和随机森林模型进行溪流水质预测--文献阅读

流域特征和气候变量(例如地形、土壤、气候数据)也会影响河流水质。例如,陡坡可能会通过将污染物转移到溪流中来影响溪流水质,从而导致水质恶化。同样,土壤特性也会影响水质。例如,以母岩为主的流域显示出较…

机器学习在地质灾害的文章--文献阅读

第一篇 Improved landslide assessment using support vector machine with bagging, boosting, and stacking ensemble machine learning framework in a mountainous watershed, Japan | SpringerLinkHeavy rainfall in mountainous terrain can trigger numerous landslide…

NYOJ88(数论)

题意明确,让计算出起始有m个金片的汉诺塔金片全部移动到另外一个针上时需要移动的最少步数是多少?(由于结果太大,现在只要求算出结果的十进制位最后六位) 解题思路:大家都很熟悉汉诺塔求移动次数公式为f(n1…

机器学习在水文地质方面的文章--文献阅读

第一篇 Ensemble machine learning paradigms in hydrology: A review - ScienceDirecthttps://www.sciencedirect.com/science/article/pii/S0022169421003139?via%3Dihub第二篇 Stream water quality prediction using boosted regression tree and random forest models …