逻辑回归与Python代码实现

逻辑回归是机器学习中非常流行的算法之一,特别适用于预测具有分类结果的数据集。这类数据集通常只有两种结果,比如0/1或者Yes/No。本文作为数据科学博客马拉松的一部分发布。

目录

什么是逻辑回归

逻辑回归是一种回归机器学习算法,用于解决分类问题/分类问题,这类问题具有二元结果,例如Yes/No、0/1、True/False等。

为什么应用逻辑回归?

线性回归对于只有两个值的问题(如图中所示)并不能给出很好的拟合线,因此在预测时准确性较低,因为它无法覆盖数据集,这是由于其线性特性。对于最佳拟合分类数据集,需要一个曲线,这可以通过逻辑回归实现,因为它使用Sigmoid函数进行预测。

逻辑回归中的数学

逻辑回归曲线弯曲的主要原因是它通过Sigmoid函数计算得出,该函数也被称为Logistic函数,因为它在逻辑回归中使用。这是一个具有“S”形曲线的数学函数。Sigmoid函数的值始终位于0和1之间,这就是为什么它被用来解决具有两个可能值的分类问题

在预测中实现逻辑回归

逻辑回归使用Sigmoid函数对分类值进行预测。它设置了一个截断点值,通常设置为0.5,当逻辑曲线的预测输出超过这个截断点时,就给出数据集属于哪个类别的预测输出。例如,在糖尿病预测模型中,如果输出超过截断点,预测输出将给出糖尿病的Yes,否则为No,如果值低于截断点。

性能评估

为了衡量解决分类问题的模型性能,使用混淆矩阵。混淆矩阵的关键术语包括:TN代表真阴性(预测的负值与实际的负值匹配),FP代表假阳性(实际值为负,但模型预测为正值),FN代表假阴性(实际值为正,但模型预测为负值),TP代表真阳性(预测的正值与实际的正值匹配)。对于一个好的模型,不应该有太多的假阳性或假阴性。

逻辑回归的关键特性

1. 逻辑回归是最受欢迎的机器学习算法之一,用于监督机器学习技术。它使用给定的一组独立变量来预测分类因变量。

2. 它预测的是一个分类变量的输出,这个变量是离散的。它可以是Yes或No,0或1,真或假等,但它不是给出确切的0和1的值,而是给出数据集的概率输出,这个概率值位于0和1之间。

3. 它与线性回归相似。唯一的区别是线性回归用于解决回归问题,而逻辑回归用于解决分类问题/分类问题。

4. 在逻辑回归中,使用“S”形的逻辑(sigmoid)函数作为拟合曲线,其输出值位于0和1之间。

二项式:二项式逻辑回归处理目标变量只有两种可能值的问题,0或1。这可以表示Yes/No、True/False、Dead/Alive等分类值。

序数:序数逻辑回归处理目标变量可以有3个或更多值的问题,这些值是无序的。这些值没有任何数量上的意义。例如,类型1的房子,类型3的房子,类型3的房子等。

多项式:多项式逻辑回归与序数逻辑回归一样,处理目标值大于或等于3的问题。主要的区别在于,与序数不同,这些值是有序的。这些值具有数量上的意义。例如,技能评估为低、平均、专家。

[注意:所使用的数据集是泰坦尼克号数据集]

import pandas as pd import numpy as np # import matplotlib.pyplot as plt # import seaborn as sns sns.set() titanic_data = pd.read_csv('titanic_train.csv') print(titanic_data.head()) sns.heatmap(titanic_data.isnull(), cbar=False) sns.countplot(x='Survived', data=titanic_data) sns.countplot(x='Survived', hue='Sex', data=titanic_data) sns.countplot(x='Survived', hue='Pclass', data=titanic_data) sns.boxplot(titanic_data['Pclass'], titanic_data['Age']) def input_missing_age(columns): age = columns[0] passenger_class = columns[1] if pd.isnull(age): if passenger_class == 1: return titanic_data[titanic_data['Pclass'] == 1]['Age'].mean() elif passenger_class == 2: return titanic_data[titanic_data['Pclass'] == 2]['Age'].mean() elif passenger_class == 3: return titanic_data[titanic_data['Pclass'] == 3]['Age'].mean() else: return age else: return age titanic_data['Age'] = titanic_data[['Age', 'Pclass']].apply(input_missing_age, axis=1) titanic_data.drop('Cabin', axis=1, inplace=True) titanic_data.dropna(inplace=True) sex_data = pd.get_dummies(titanic_data['Sex'], drop_first=True) embarked_data = pd.get_dummies(titanic_data['Embarked'], drop_first=True) titanic_data = pd.concat([titanic_data, sex_data, embarked_data], axis=1) titanic_data.drop(['Name', 'PassengerId', 'Ticket', 'Sex', 'Embarked'], axis=1, inplace=True) titanic_data.head() y_data = titanic_data['Survived'] x_data = titanic_data.drop('Survived', axis=1) from sklearn.model_selection import train_test_split x_training_data, x_test_data, y_training_data, y_test_data = train_test_split(x_data, y_data, test_size=0.3) from sklearn.linear_model import LogisticRegression model = LogisticRegression() model.fit(x_training_data, y_training_data) predictions = model.predict(x_test_data) from sklearn.metrics import classification_report print(classification_report(y_test_data, predictions)) from sklearn.metrics import confusion_matrix print(confusion_matrix(y_test_data, predictions))
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485