逻辑回归是机器学习中非常流行的算法之一,特别适用于预测具有分类结果的数据集。这类数据集通常只有两种结果,比如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))