从线性回归到逻辑回归
首先从线性回归模型出发,线性回归模型的输出值是连续型变量,值域为;逻辑回归的输出值是离散型变量,值域为;
逻辑回归实属广义线性模型,线性回归预测函数可简单表示为,而逻辑回归预测函数需要做一个函数转换,其中,即通过将线性回归原本的值域映射到区间内,当取值大于临界值时为一类,小于临界值时为另一类,从而达到分类的目的。这里一般使用sigmoid函数,即
sigmoid有一个性质:当趋于时,趋于;当趋于时,趋于。
因此,线性回归实际解决的是预测实数连续值的问题;逻辑回归解决的是分类问题。
逻辑回归原理
逻辑回归的假设函数为:
其中为样本输入,为模型输出,为要求解的模型参数。设0.5为临界值,当时,即时,为1;当时,即时,为0。
模型输出值在区间内取值,因此可从概率角度进行解释:越接近于0,则分类为的概率越高;越接近于1,则分类为的概率越高;越接近于临界值0.5,则无法判断,分类准确率会下降。
逻辑回归的损失函数
模型评估指标
准确率、召回率等
模型优缺点
优点:
1.便于理解和实现,可以观测样本的概率分数
2.训练速度快
3.由于经过了sigmoid函数的映射,对数据中小噪声的鲁棒性较好
4.不受多重共线性的影响(可通过正则化进行消除)
缺点:
1.容易欠拟合
2.特征空间很大时效果不好
3.由于sigmoid函数的特性,接近0/1的两侧概率变化较平缓,中间概率敏感,波动较大;导致很多区间特征变量的变化对目标概率的影响没有区分度,无法确定临界值。
案例(调用sklearn库)
基础代码
data=data.replace(to_replace="?",value=np.nan)
data=data.dropna(how='any')
data[column_names[1:10]].head()
from sklearn.cross_validation import train_test_split
X_train,X_test,y_train,y_test=train_test_split(data[column_names[1:10]],data[column_names[10]],test_size=0.25,random_state=33)
y_train.value_counts()
from sklearn.preprocessing import StandardScaler #导入数据标准化模块
from sklearn.linear_model import LinearRegression
# 标准化数据
ss=StandardScaler()
X_train=ss.fit_transform(X_train)
X_test=ss.transform(X_test)
lr=LinearRegression()
lr.fit(X_train,y_train)
lr_y_predict=lr.predict(X_test)
from sklearn.metrics import classification_report
print('Accuracy of LR Classifier:',lr.score(X_test,y_test))
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
churn=pd.read_csv('w4_churn.csv')
churn