逻辑回归概述
- 逻辑回归解决二分类问题,现在已经演变为求二分类问题与多分类问题,通过寻找最优参数来正确的分类原始数据
- 通过已知自变量来预测一个离散型因变量的值.简单来说,就是通过拟合一个逻辑函数来预测一个时间发生的概率,输出值在0-1
- 实际是一种分类方法
- 常用于数据挖掘,疾病自动诊断,经济预测等
逻辑回归之分类
简历模型
输入: x→(x1,x2,x3,....,xn)
x是特征
标记结果: y→{0,1}
y是预测出来的概率
预测输出: 0<=h(x)<=1
h(x) 就是概率
if h(x) >0.5 , h(x) = 1
; if h(x) <= 0.5 , h(x) = 0
线性回归 h(x) 是连续类型的值
逻辑回归也会有线性回归 h(x) = g(wx+b) 的步骤
h(x)的范围其实属于(-∞,+∞),用一个sigmoid函数(就是g(x)等于后面那串),进行离散化处理,g(x)最后得到的结果在0-1之间
sigmoid函数的定义域属于(-∞,+∞),值域(0,1)
逻辑回归算法原理
逻辑回归(Logistic Regression,简称LR)。
其实是⼀个很有误导性的概念,虽然它的名字中带有 “回归” 两个字,但是它最擅⻓处理的却是分类问题。
找到一条线,尽可能将数据’一分为二’
逻辑回归案例
公式解释:
假设: 要将邮件 分为 垃圾邮件与非垃圾邮件
非垃圾邮件为 h ,y=1
垃圾邮件为 1-h ,y=0
合并(将上面的分段函数合并成了一个函数): 当y=1时,1次幂的结果为本身,当y=0是,任何数的0次幂结果都为1
对数化 : h^y * (1-h)^(1-y)
针对这个函数求log, log h^y * (1-h)^(1-y)
数值会更大
在数学里面 : loga*b
= loga * logb
loga^n
= n*loga
so logh^y * (1-h)^(1-y)
= logh^y + log(1-h)^(1-y)
总体样本 : 又因为 loga^b
= b * loga
so logh^y * (1-h)^(1-y)
= logh^y + log(1-h)^(1-y)
变成了 y* logh+(1-y)*log(1-h)
这个算的是总体样本
对于逻辑回归,这样得到的损失函数为凸函数,可以求解得到全局最小值
逻辑回归算法原理总结
逻辑回归算法原理拓展-正则化项
一定程度上防止过拟合.


逻辑回归与线性回归的区别
逻辑回归与线性回归最大的区别就在于它们的因变量(y)不同,其他的基本都差不多。
正是因为如此,这两种回归可以归于同一个家族,即广义线性模型(generalizedlinearmodel)。
如果因变量(y)是连续的,就是线性回归,如房价走势;
如果因变量(y)是离散类型,就是逻辑回归,如信用评估。
回归问题的值域是(-∞, +∞),用线性回归可以进行预测。
而分类问题的值域是[0, 1],显然不可以直接用线性回归来预测这类问题。
如果把线性回归的输出结果外面再套一层Sigmoid函数,正好可以让值域落在0和1之间,这样的算法
就是逻辑回归。
逻辑回归优缺点
优点:
• 速度快,适合二分类问题
• 简单易于理解,直接看到各个特征的权重(θT)
• 能容易地更新模型吸收新的数据
缺点:
• 对数据和场景的适应能力有局限性,不如决策树算法适应性那么强
• 容易欠拟合,分类精度可能不高
逻辑回归代码实现
导入模块
from sklearn.linear_model import LogisticRegression as LR
class sklearn.linear_model.LogisticRegression(penalty='l2', *, dual=False, tol=0.0001, C=1.0, fit_interce
pt=True, intercept_scaling=1, class_weight=None, random_state=None, solver='lbfgs', max_iter=100,
multi_class='auto', verbose=0, warm_start=False, n_jobs=None, l1_ratio=None)
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression as LR
data = pd.read_csv('bankloan.csv')
data.info()
x_train, x_test, y_train, y_test = train_test_split(data.iloc[:, :-1], data['违约'], test_size=0.2)
lr = LR().fit(x_train, y_train)
y_p = lr.predict(x_test)
lr.score(x_test, y_test)
模型方法*
模型方法*
[外链图片转存中…(img-jaAbzq8i-1658305597514)]
[外链图片转存中…(img-KCrGQCED-1658305597516)]
[外链图片转存中…(img-HN5upMLm-1658305597518)]
[外链图片转存中…(img-sK4XKOiE-1658305597519)]