面试完美团,逻辑回归 彻底搞懂了。。。


哈喽,我是kk~
实践中搞懂原理,探讨中同样可以!
上周有位工作一年的同学面试美团,本来对于基础算法非常的熟悉。但是在和面试官聊到逻辑回归的时候。发现有些特别细节的点还是不太熟悉。
每一块理论,总有犄角旮旯不懂的地方。在讨论过后,算是彻底理解。
趁着这个机会,咱们今天也把逻辑回归全面的梳理一番。
首先来说,逻辑回归(Logistic Regression)是一种广泛使用的分类算法,尽管其名字中有“回归”二字,但它实际上是一种分类算法。
逻辑回归原理
逻辑回归是一种用于二分类问题的统计方法,它通过将线性回归的输出通过一个逻辑函数(Logistic Function,又称为Sigmoid函数)映射到(0, 1)之间,从而进行分类。
1. 线性回归
线性回归的目标是找到一个最佳拟合的直线来预测连续变量。假设我们有一个自变量 
 和因变量 
,线性回归的模型可以表示为:
其中,
 是截距,
 是斜率。我们通过最小化均方误差(MSE)来找到最佳的 
 和 

2. 逻辑函数
逻辑回归将线性回归的输出通过一个逻辑函数进行变换,使其值在0到1之间。逻辑函数的形式为:
其中,
。逻辑回归模型可以表示为:
通过取对数几率,我们得到:
3. 逻辑回归的目标
逻辑回归的目标是通过最大化似然函数来估计参数 
。似然函数表示为:
通过取对数,我们得到对数似然函数:
我们通过最大化这个对数似然函数来找到最佳的参数 

实际案例
下面,我来举一个案例,大家可以根据案例实际感受体验一下~
数据集
泰坦尼克号数据集包含了乘客的各种信息,包括是否幸存。数据集中的主要特征包括:
Pclass: 船舱等级(1, 2, 3)
Sex: 性别
Age: 年龄
SibSp: 兄弟姐妹/配偶数量
Parch: 父母/子女数量
Fare: 船票费用
Embarked: 登船港口(C, Q, S)
目标变量是Survived,表示乘客是否幸存(0:未幸存,1:幸存)。
数据预处理
首先,我们进行数据预处理,包括处理缺失值、特征编码等。
import pandas as pdimport numpy as npimport seaborn as snsimport matplotlib.pyplot as pltfrom sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import accuracy_score, confusion_matrix, classification_reportfrom sklearn.preprocessing import StandardScaler# 加载数据data = pd.read_csv('titanic.csv')# 数据预览print(data.head())# 处理缺失值data['Age'].fillna(data['Age'].median(), inplace=True)data['Embarked'].fillna(data['Embarked'].mode()[0], inplace=True)# 特征编码data['Sex'] = data['Sex'].map({'male': 0, 'female': 1})data['Embarked'] = data['Embarked'].map({'C': 0, 'Q': 1, 'S': 2})# 删除无用的列data.drop(columns=['Name', 'Ticket', 'Cabin'], inplace=True)# 特征和目标变量X = data.drop(columns='Survived')y = data['Survived']# 数据标准化scaler = StandardScaler()X_scaled = scaler.fit_transform(X)# 训练集和测试集划分X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
模型训练
接下来,我们训练逻辑回归模型。
# 训练逻辑回归模型model = LogisticRegression()model.fit(X_train, y_train)# 预测y_pred = model.predict(X_test)# 模型评估accuracy = accuracy_score(y_test, y_pred)conf_matrix = confusion_matrix(y_test, y_pred)class_report = classification_report(y_test, y_pred)print(f'Accuracy: {accuracy}')print('Confusion Matrix:')print(conf_matrix)print('Classification Report:')print(class_report)
可视化结果
最后,我们通过可视化来分析模型的性能和结果。
# 混淆矩阵可视化plt.figure(figsize=(8, 6))sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues')plt.title('Confusion Matrix')plt.xlabel('Predicted')plt.ylabel('Actual')plt.show()

# 绘制ROC曲线from sklearn.metrics import roc_curve, roc_auc_scorey_prob = model.predict_proba(X_test)[:, 1]fpr, tpr, thresholds = roc_curve(y_test, y_prob)roc_auc = roc_auc_score(y_test, y_prob)plt.figure(figsize=(8, 6))plt.plot(fpr, tpr, color='blue', lw=2, label=f'ROC Curve (area = {roc_auc:.2f})')plt.plot([0, 1], [0, 1], color='grey', lw=2, linestyle='--')plt.xlim([0.0, 1.0])plt.ylim([0.0, 1.05])plt.xlabel('False Positive Rate')plt.ylabel('True Positive Rate')plt.title('Receiver Operating Characteristic (ROC) Curve')plt.legend(loc='lower right')plt.show()

这次给大家介绍的是详细的理论阐述和实际案例,介绍了逻辑回归的基本原理、模型训练和评估方法。
逻辑回归是处理二分类问题的强大工具,通过合适的数据预处理和特征工程,可以实现良好的分类效果。Python代码提供了实际操作的指南,并通过可视化图形进一步帮助理解模型的性能。
好了,今天的内容先这样,继续想看解决什么问题,评论区留言~
最后有一个论文福利是给大家申请到的,9.9可以帮大家安排的明明白白的~

到顶部