logistics回归模型的原理和实现

机器学习基础(七)

Logistics回归

原理

Logistics回归是统计学习中的经典分类方法,是一种广义的线性回归模型。它经常被使用于二分类问题的解决上,具有不错的效果。

Logistics回归是在线性回归的基础上,加入了 s i g m o i d sigmoid sigmoid函数,使函数的取值分布在 [ 0 , 1 ] [0,1] [0,1]之间,从而使模型具有分类的效果。

Logistics回归的表达式为:
h θ ( x ) = g ( θ T X ) = 1 1 + e − θ T x h_{\theta}(x)=g(\theta^{T}X)=\frac{1}{1+e^{-\theta^{T}x}} hθ(x)=g(θTX)=1+eθTx1

所以可以得到
P ( Y = 1 ∣ x ) = h θ ( x ) P ( Y = 0 ∣ x ) = 1 − h θ ( x ) P(Y=1|x)=h_{\theta}(x)\qquad P(Y=0|x)=1-h_{\theta}(x) P(Y=1x)=hθ(x)P(Y=0x)=1hθ(x)

然后就可以得到模型的似然函数为
L ( θ ) = ∏ i = 1 n ( h θ ( x i ) ) y i ( 1 − h θ ( x i ) ) 1 − y i L(\theta)=\prod^{n}_{i=1}(h_{\theta}(x_{i}))^{y_{i}}(1-h_{\theta}(x_{i}))^{1-y_{i}} L(θ)=i=1n(hθ(xi))yi(1hθ(xi))1yi

即当 y i = 0 y_{i}=0 yi=0时函数取 h θ ( x ) h_{\theta}(x) hθ(x),当 y i = 1 y_{i}=1 yi=1时函数取 1 − h θ ( x ) 1-h_{\theta}(x) 1hθ(x)

然后对似然函数取对数,得到
ln ⁡ ( L ( θ ) ) = ∑ i = 1 n ( y i ln ⁡ ( h θ ( x i ) ) + ( 1 − y i ) ln ⁡ ( 1 − h θ ( x ) ) ) ) \ln(L(\theta))=\sum^{n}_{i=1}(y_{i}\ln(h_{\theta}(x_{i}))+(1-y_{i})\ln(1-h _{\theta}(x)))) ln(L(θ))=i=1n(yiln(hθ(xi))+(1yi)ln(1hθ(x))))

然后通过求解模型的极值,就可以得到最优的 θ \theta θ值,这也是看作Logistics函数的损失函数,这是所有数据的总损失。但似然函数是取模型最大值时的 θ \theta θ值,损失函数是需要求损失最小,所以可以将似然函数取负,然后取平均每个数据的损失,这样可以减少计算量。
c o s t ( h θ ( x ) , y ) = − 1 n ∑ i = 1 n ( y i ln ⁡ ( h θ ( x i ) ) + ( 1 − y i ) ln ⁡ ( 1 − h θ ( x ) ) ) ) cost(h_{\theta}(x),y)=-\frac{1}{n}\sum^{n}_{i=1}(y_{i}\ln(h_{\theta}(x_{i}))+(1-y_{i})\ln(1-h _{\theta}(x)))) cost(hθ(x),y)=n1i=1n(yiln(hθ(xi))+(1yi)ln(1hθ(x))))

代码实现

#导入所需的模块
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler

#导入癌症数据
data = load_breast_cancer()
x = pd.DataFrame(data.data,columns=data["feature_names"])
y = data.target
#切分数据集
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state=1234)

#数据集进行标准化处理
std = StandardScaler()
x_train = std.fit_transform(x_train)
x_test = std.transform(x_test)

#建立logistics回归模型
#模型默认使用l2正则化,C是指定正则化的参数
LR = LogisticRegression(C=60)
LR.fit(x_train,y_train)
#查看模型的准确率
print(LR.score(x_test,y_test))
y_pre = LR.predict(x_test)
#查看模型的召回率
print(classification_report(x_pre,y_test,target_names=data.target_names))
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值