机器学习:逻辑回归模型算法原理(附案例实战)
Posted i阿极
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习:逻辑回归模型算法原理(附案例实战)相关的知识,希望对你有一定的参考价值。
机器学习:逻辑回归模型算法原理
作者:i阿极
作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页
😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍
📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!💪
文章目录
1、实验目的
随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
在这个信息爆炸的时代,如何高效处理数据并利用数据推动决策显得尤为重要,这便是人们通常所说的“数据分析”。与数据分析相伴而生的机器学习(Machine Learning),有些人可能会感到陌生,然而说到战胜了众多人类围棋高手的智能机器人AlphaGo,想必大多数人都有所耳闻。AlphaGo背后的原理支撑就是机器学习,它通过模拟人类的学习行为,不停地分析海量的围棋数据,发现数据背后的规律,从而在已有条件下做出最为理性的决断,这个过程充满了机器美学。
2、实验原理
逻辑回归模型虽然名字中有回归两字,其本质却是分类模型。
分类模型与回归模型的区别在于其预测的变量不是连续的,而是离散的一些类别,以最常见的二分类模型为例,分类模型可以预测一个人是否会违约、客户是否会流失、肿瘤是属于良性肿瘤还是恶性肿瘤等
逻辑回归模型的算法原理中同样涉及了之前线性回归模型中学习到的线性回归方程:
上面这个方程是预测连续变量的,其取值范围属为负无穷到正无穷,而逻辑回归模型是用来预测类别的,比如它预测某物品是属于A类还是B类,它本质预测的是属于A类或者B类的概率,而概率的取值范围是0-1,因此我们不能直接用线性回归方程来预测概率。
需要到用到下图所示的Sigmoid函数,该函数可以将取值为(-∞, +∞)的数转换到(0,1)之间,例如倘若y=3,那个通过Sigmoid函数转换后,f(y)就变成了1/(1+e^-3)=0.95了,这就可以作为一个概率值使用了。
可以通过如下代码绘制Sigmoid函数:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-6, 6)
y = 1.0 / (1.0 + np.exp(-x))
plt.plot(x,y)
plt.show()
通过linspace()函数生成-6到6的等差数列,默认50个数.
Sigmoid函数计算公式,exp()函数表示指数函数
如果对Sigmoid函数还是感到有点困惑,则可以参考下图的一个推导过程,其中y就是之前提到的线性回归方程,其范围是(-∞, +∞),那么指数函数的范围便是(0, +∞),再做一次变换,的范围就变成(0, 1)了,然后分子分母同除以就获得了我们上面提到的Sigmoid函数了。
逻辑回归模型本质就是将线性回归模型通过Sigmoid()函数进行了一个非线性转换得到一个介于0到1之间的概率值,对于二分类问题(分类0和1)而言,其预测分类为1(或者说二分类中数值较大的分类)的概率如下图所示:
因为概率和为1,则分类为0(或说二分类中数值较小的那个分类)的概率为1-P:
3、实验环境
Python3.9
Anaconda
Jupyter Notebook
4、乳腺癌肿瘤预测案例
4.1目标
根据历史女性乳腺癌患者数据集(医学指标)构建逻辑回归分类模型进行良/恶性乳腺癌肿瘤预测
4.2数据集来源
数据集源于威斯康星州临床科学中心。每个记录代表一个乳腺癌的随访数据样本。这些是DR Wolberg自1984~1995随访搜集连续乳腺癌患者数据,数据仅包括那些具有侵入性的病例乳腺癌并没有远处转移的医学指标数据集。
4.3导入模块
import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings('ignore')
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
4.4加载数据
定义列名并导入数据
column_names = ['样本代码','肿块厚度','均匀细胞大小','均匀细胞形状','边缘粘连','单一上皮细胞大小','裸核',
'乏味染色体','正常核','有丝分裂','分类']
data = pd.read_csv('/home/kesci/breast-cancer-wisconsin.data',names=column_names)
print(data.shape)
4.5数据清洗
删除缺失值
data = data.replace('?',np.nan)
data = data.dropna(how='any')
print(data.shape)
4.6划分训练集和测试集
X_train,X_test,y_train,y_test = train_test_split(data[column_names[1:10]],data[column_names[10]],
test_size=0.25)
4.7标准化处理
ss = StandardScaler()
X_train = ss.fit_transform(X_train)
X_test = ss.transform(X_test)
4.8建立逻辑回归模型
lr = LogisticRegression(C=1.0,penalty='l1',solver='liblinear')
lr.fit(X_train,y_train)
y_pred = lr.predict(X_test)
5、模型评估
print('预测结果准确性:',lr.score(X_test,y_test))
print('预测结果准确性:',classification_report(y_test,y_pred,target_names=['良性', '恶性']),sep='\\n')
总结
分类模型与回归模型的区别在于其预测的变量不是连续的,而是离散的一些类别,例如,最常见的二分类模型可以预测一个人是否会违约、客户是否会流失、肿瘤是良性还是恶性等。本章要学习的逻辑回归模型虽然名字中有“回归”二字,但其在本质上却是分类模型。
📢主页:博主个人首页
📢文章下方有交流学习区!一起学习进步!💪💪💪
📢创作不易,你的支持和鼓励是我创作的动力❗❗❗
机器学习:LightGBM算法原理(附案例实战)
机器学习:LightGBM算法原理(附案例实战)
作者:i阿极
作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页
😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍
📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!💪
文章目录
1、LightGBM算法原理
LightGBM是一个基于决策树的梯度提升框架,被广泛应用于机器学习任务,如分类、回归和排序等。LightGBM采用了一些独特的技术,例如基于直方图的决策树学习和GOSS(Gradient-based One-Side Sampling)等,以提高模型的训练效率和准确性。
LightGBM的核心思想是采用基于直方图的决策树算法。直方图是对特征值进行离散化处理后,将连续的数值分段成多个区间,每个区间内的数值数量作为该区间的计数值。然后通过直方图算法来优化决策树的分裂点选择,从而提高决策树的训练效率。
具体来说,LightGBM采用了以下几种优化方法:
-
基于直方图的决策树算法
LightGBM采用了基于直方图的算法来对连续特征进行离散化处理,将特征值分段成多个区间,计算每个区间内的样本数量,然后根据区间的计数值来选择最佳的分裂点。这种方法避免了对特征进行排序和遍历的操作,从而提高了训练速度。 -
基于梯度的单边采样
LightGBM采用了基于梯度的单边采样算法来加速训练过程。该算法在每次迭代时,优先选择梯度较大的样本进行训练,从而可以快速找到最佳的模型参数。 -
基于直方图的特征选取
LightGBM还采用了基于直方图的特征选取算法,该算法通过计算每个特征的直方图信息来评估特征的重要性,然后根据特征重要性的排序选择最佳的特征集合。 -
带深度的叶节点优化
LightGBM采用了带深度的叶节点优化算法,该算法可以避免过拟合问题,提高模型的泛化能力。具体来说,该算法通过限制叶节点的深度来控制模型的复杂度,从而防止模型在训练数据上过拟合。
2、实验环境
Python 3.9
Anaconda
Jupyter Notebook
3、LightGBM算法案例实战
3.1案例背景
投资商经常会通过多个不同渠道投放广告,以此来获得经济利益。在本案例中我们选取公司在电视、广播和报纸上的投入,来预测广告收益,这对公司策略的制定是有较重要的意义。
3.2模型搭建
读取数据
import pandas as pd
df = pd.read_excel('/home/mw/input/XG3004/广告收益数据.xlsx')
df.head()
提取特征变量和目标变量
X = df.drop(columns='收益')
y = df['收益']
划分训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=123)
模型训练和搭建
from lightgbm import LGBMRegressor
model = LGBMRegressor()
model.fit(X_train, y_train)
3.3模型预测及评估
预测测试数据
y_pred = model.predict(X_test)
y_pred[0:5]
预测值和实际值对比
a = pd.DataFrame() # 创建一个空DataFrame
a['预测值'] = list(y_pred)
a['实际值'] = list(y_test)
a.head()
手动输入数据进行预测
X = [[71, 11, 2]]
model.predict(X)
查看R-square
from sklearn.metrics import r2_score
r2 = r2_score(y_test, model.predict(X_test))
r2
查看评分
model.score(X_test, y_test)
特征重要性
model.feature_importances_
3.4模型参数调优
参数调优
from sklearn.model_selection import GridSearchCV # 网格搜索合适的超参数
parameters = 'num_leaves': [15, 31, 62], 'n_estimators': [20, 30, 50, 70], 'learning_rate': [0.1, 0.2, 0.3, 0.4] # 指定分类器中参数的范围
model = LGBMRegressor() # 构建模型
grid_search = GridSearchCV(model, parameters,scoring='r2',cv=5)
cv=5表示交叉验证5次,scoring='r2’表示以R-squared作为模型评价准则
输出参数最优值
grid_search.fit(X_train, y_train) # 传入数据
grid_search.best_params_ # 输出参数的最优值
重新搭建LightGBM回归模型
model = LGBMRegressor(num_leaves=31, n_estimators=50,learning_rate=0.3)
model.fit(X_train, y_train)
查看得分
model.score(X_test, y_test)
总结
总之,LightGBM是一种高效的集成学习框架,它采用了多种优化方法来提高训练速度和准确性,能够在大规模数据集上实现高效的训练和预测。
📢文章下方有交流学习区!一起学习进步!💪💪💪
📢创作不易,如果觉得文章不错,可以点赞👍收藏📁评论📒
📢你的支持和鼓励是我创作的动力❗❗❗
以上是关于机器学习:逻辑回归模型算法原理(附案例实战)的主要内容,如果未能解决你的问题,请参考以下文章