分类技术是机器学习和数据挖掘应用程序的重要组成部分。数据科学中大约70%的问题是分类问题。存在许多可用的分类问题, 但是物流回归很常见, 是解决二元分类问题的有用回归方法。分类的另一类是多项式分类, 它处理目标变量中存在多个类的问题。例如, IRIS数据集是非常著名的多类分类示例。其他示例是对文章/博客/文档类别进行分类。
Logistic回归可用于各种分类问题, 例如垃圾邮件检测。糖尿病预测, 如果给定的客户将购买特定产品或他们会吸引其他竞争对手, 则用户是否会点击给定的广告链接, 并且还有更多示例。
Logistic回归是用于两类分类的最简单, 最常用的机器学习算法之一。它易于实现, 可以用作任何二进制分类问题的基准。它的基本基本概念在深度学习中也具有建设性。 Logistic回归描述和估计一个因变量和自变量之间的关系。
在本教程中, 你将在Logistic回归中学习以下内容:
- Logistic回归简介
- 线性回归与逻辑回归
- 最大似然估计与普通最小二乘法
- Logistic回归如何工作?
- Scikit-learn中的模型构建
- 使用混淆矩阵进行模型评估。
- Logistic回归的优缺点
逻辑回归
Logistic回归是用于预测二进制类别的统计方法。结果或目标变量本质上是二分法的。二分法意味着只有两种可能的类别。例如, 它可以用于癌症检测问题。它计算事件发生的概率。
这是线性回归的一种特殊情况, 其中目标变量本质上是分类的。它使用几率对数作为因变量。 Logistic回归利用logit函数预测二进制事件的发生概率。
线性回归方程:
其中, y是因变量, x1, x2 …和Xn是解释变量。
乙状结肠功能:
将Sigmoid函数应用于线性回归:
Logistic回归的属性:
- 逻辑回归中的因变量遵循伯努利分布。
- 估计是通过最大似然来完成的。
- 没有R平方, 模型适用性通过Concordance, KS-Statistics计算。
线性回归与逻辑回归
线性回归可提供连续的输出, 而逻辑回归可提供恒定的输出。连续输出的一个例子是房屋价格和股票价格。离散输出的示例正在预测患者是否患有癌症, 并预测客户是否会流失。使用普通最小二乘(OLS)估计线性回归, 而使用最大似然估计(MLE)方法估计逻辑回归。
最大似然估计与最小二乘法
MLE是一种”可能性”最大化方法, 而OLS是一种距离最小化近似方法。最大化似然函数可确定最有可能产生观测数据的参数。从统计角度来看, MLE将平均值和方差设置为确定给定模型的特定参数值的参数。这组参数可用于预测正态分布所需的数据。
普通最小二乘估计值是通过在给定的数据点上拟合回归线而得出的, 该数据点具有平方差的最小和(最小二乘误差)。两者均用于估计线性回归模型的参数。 MLE假设一个联合概率质量函数, 而OLS不需要任何随机假设来最小化距离。
乙状结肠功能
S形函数(也称为对数函数)给出了一条’S’形曲线, 该曲线可以采用任何实数值, 并将其映射为介于0和1之间的值。如果曲线变为正无穷大, 则y预测将变为1, 并且如果曲线变为负无穷大, y预测将变为0。如果S形函数的输出大于0.5, 则可以将结果分类为1或YES, 如果小于0.5, 则可以将其分类为0或。没有。输出不能为例如:如果输出为0.75, 则可以用概率来表示为:患者有75%的机会患上癌症。
Logistic回归的类型
Logistic回归的类型:
- 二进制Logistic回归:目标变量只有两个可能的结果, 例如垃圾邮件或非垃圾邮件, 癌症或无癌症。
- 多项逻辑回归:目标变量具有三个或更多名义类别, 例如预测酒的类型。
- 序数逻辑回归:目标变量具有三个或更多序数类别, 例如餐厅或产品等级从1到5。
Scikit-learn中的模型构建
让我们建立糖尿病预测模型。
在这里, 你将使用Logistic回归分类器预测糖尿病。
首先, 使用熊猫的read CSV函数加载所需的Pima印度糖尿病数据集。你可以从以下链接下载数据:https://www.kaggle.com/uciml/pima-indians-diabetes-database
加载数据中
#import pandas
import pandas as pd
col_names = ['pregnant', 'glucose', 'bp', 'skin', 'insulin', 'bmi', 'pedigree', 'age', 'label']
# load dataset
pima = pd.read_csv("pima-indians-diabetes.csv", header=None, names=col_names)
pima.head()
选择特征
在这里, 你需要将给定的列分为因变量(目标变量)和自变量(或特征变量)两种类型。
#split dataset in features and target variable
feature_cols = ['pregnant', 'insulin', 'bmi', 'age', 'glucose', 'bp', 'pedigree']
X = pima[feature_cols] # Features
y = pima.label # Target variable
分割数据
为了了解模型的性能, 将数据集分为训练集和测试集是一个很好的策略。
让我们使用函数train_test_split()拆分数据集。你需要传递3个参数功能, 目标和test_set大小。此外, 你可以使用random_state随机选择记录。
# split X and y into training and testing sets
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test=train_test_split(X, y, test_size=0.25, random_state=0)
/home/admin/.local/lib/python3.5/site-packages/sklearn/cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also, note that the interface of the new CV iterators is different from that of this module. This module will be removed in 0.20.
"This module will be removed in 0.20.", DeprecationWarning)
在这里, 数据集以75:25的比例分为两部分。这意味着75%的数据将用于模型训练, 而25%的数据将用于模型测试。
模型开发与预测
首先, 导入Logistic回归模块, 并使用LogisticRegression()函数创建一个Logistic回归分类器对象。
然后, 使用fit()将模型拟合到训练集上, 并使用predict()对测试集执行预测。
# import the class
from sklearn.linear_model import LogisticRegression
# instantiate the model (using the default parameters)
logreg = LogisticRegression()
# fit the model with data
logreg.fit(X_train, y_train)
#
y_pred=logreg.predict(X_test)
使用混淆矩阵的模型评估
混淆矩阵是用于评估分类模型性能的表。你还可以可视化算法的性能。混淆矩阵的基本原理是按类别汇总正确和错误预测的数量。
# import the metrics class
from sklearn import metrics
cnf_matrix = metrics.confusion_matrix(y_test, y_pred)
cnf_matrix
array([[119, 11], [ 26, 36]])
在这里, 你可以看到数组对象形式的混淆矩阵。该矩阵的维数为2 * 2, 因为该模型是二进制分类。你有两个类别0和1。对角线值表示准确的预测, 而非对角线元素则表示不正确的预测。在输出中, 119和36是实际预测, 而26和11是不正确的预测。
使用热图可视化混淆矩阵
让我们使用matplotlib和seaborn以混淆矩阵的形式可视化模型的结果。
在这里, 你将使用Heatmap可视化混淆矩阵。
# import required modules
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
class_names=[0, 1] # name of classes
fig, ax = plt.subplots()
tick_marks = np.arange(len(class_names))
plt.xticks(tick_marks, class_names)
plt.yticks(tick_marks, class_names)
# create heatmap
sns.heatmap(pd.DataFrame(cnf_matrix), annot=True, cmap="YlGnBu" , fmt='g')
ax.xaxis.set_label_position("top")
plt.tight_layout()
plt.title('Confusion matrix', y=1.1)
plt.ylabel('Actual label')
plt.xlabel('Predicted label')
Text(0.5, 257.44, 'Predicted label')
混淆矩阵评估指标
让我们使用模型评估指标(例如准确性, 准确性和召回率)评估模型。
print("Accuracy:", metrics.accuracy_score(y_test, y_pred))
print("Precision:", metrics.precision_score(y_test, y_pred))
print("Recall:", metrics.recall_score(y_test, y_pred))
Accuracy: 0.8072916666666666
Precision: 0.7659574468085106
Recall: 0.5806451612903226
好吧, 你的分类率为80%, 被认为是不错的准确性。
精度:精度是指精度, 即模型的精度。换句话说, 你可以说, 当模型做出预测时, 它正确的频率是多少。在你的预测案例中, 当你的Logistic回归模型预测患者将患有糖尿病时, 该患者有76%的时间。
回想一下:如果测试集中有糖尿病患者, 你的Logistic回归模型可以在58%的时间内识别出糖尿病。
ROC曲线
接收器工作特性(ROC)曲线是真实的阳性率相对于假阳性率的曲线图。它显示了敏感性和特异性之间的权衡。
y_pred_proba = logreg.predict_proba(X_test)[::, 1]
fpr, tpr, _ = metrics.roc_curve(y_test, y_pred_proba)
auc = metrics.roc_auc_score(y_test, y_pred_proba)
plt.plot(fpr, tpr, label="data 1, auc="+str(auc))
plt.legend(loc=4)
plt.show()
该案例的AUC得分是0.86。 AUC得分1代表完美分类器, 而0.5代表毫无价值的分类器。
优点
由于其高效和直接的特性, 因此不需要高计算能力, 易于实现, 易于解释的方法, 并被数据分析师和科学家广泛使用。而且, 它不需要缩放功能。 Logistic回归为观察提供了概率分数。
缺点
Logistic回归无法处理大量分类特征/变量。它容易过拟合。而且, 无法通过逻辑回归解决非线性问题, 这就是为什么它需要转换非线性特征的原因。如果逻辑变量与目标变量不相关, 非常相似或彼此相关, 则逻辑回归将无法很好地执行。
总结
在本教程中, 你涵盖了有关Logistic回归的许多详细信息。你已经了解了逻辑回归是什么, 如何建立各自的模型, 如何可视化结果以及一些理论背景信息。此外, 你还介绍了一些基本概念, 例如S型函数, 最大似然, 混淆矩阵, ROC曲线。
希望你现在可以使用Logistic回归技术来分析自己的数据集。感谢你阅读本教程!
如果你想了解有关Logistic回归的更多信息, 请参加srcmini的Python预测分析基础(第1部分)课程。
评论前必须登录!
注册