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=1∣x)=hθ​(x)P(Y=0∣x)=1−hθ​(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=1∏n​(hθ​(xi​))yi​(1−hθ​(xi​))1−yi​

即当 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) 1−hθ​(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=1∑n​(yi​ln(hθ​(xi​))+(1−yi​)ln(1−hθ​(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)=−n1​i=1∑n​(yi​ln(hθ​(xi​))+(1−yi​)ln(1−hθ​(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))
上一篇:吴恩达深度学习第一课Week2编程作业Logistics Regression with a Neural Network mindset


下一篇:logistics二分类 数据集:https://archive.ics.uci.edu/ml/datasets/Glass+Identification