开源项目之利用逻辑回归预测泰坦尼克号上乘客的生存情况

目录

引用:

数学原理:

1:线性组合

2:Sigmoid函数

3:预测类别与损失函数

4:梯度下降来优化损失函数

项目实列之预测泰坦尼克号上乘客的生存情况

1:数据准备

2:代码:

3:结果:

4:解释

结语:

参考


引用:

        逻辑回归是一种用于分类问题的统计方法,尽管其名称中带有“回归”,但它主要用于解决二分类问题。其基本思想是通过一个线性模型来估计某事件发生的概率,概率值通过逻辑函数(也称为sigmoid函数)来转换。下面阐述一下逻辑回归的基本数学原理,并举出一个基本示例(Kaggle上面的公开数据集)来说明逻辑回归。

数学原理:

1:线性组合

        我们将所有的特征进行线性组合。假设我们有三个特征 x1,x2 和 x3​(可以是年龄、性别等),我们用以下公式进行线性组合:

其中,w1,w2,w3是权重,b是偏置项,z 是线性组合的结果。

2:Sigmoid函数

        为了将线性组合的结果 z 转换为概率,我们使用了一个叫做Sigmoid函数的函数。Sigmoid函数可以将任何实数转换为0到1之间的概率:

这里,e是自然对数的底,大约等于2.71828。通过这个函数,我们将线性组合的结果 z 转换为一个概率 P(y=1∣x),即乘客生存的概率。

3:预测类别与损失函数

        有了概率后,我们可以根据概率来预测类别。如果概率大于0.5,我们预测乘客会幸存(类别为1);如果概率小于等于0.5,我们预测乘客不会幸存(类别为0)。为了找到最佳的权重和偏置项,使我们的预测尽可能准确,我们需要一个优化目标。我们使用对数似然函数作为损失函数来衡量模型的好坏:

其中,m 是样本数,yi是第 i个样本的真实标签,P(yi∣xi) 是模型预测的第 i个样本为正类(生存)的概率。

4:梯度下降来优化损失函数

        为了优化损失函数,找到最优的权重和偏置项,我们使用梯度下降法。梯度下降法通过不断调整权重和偏置项,使损失函数逐步减小。其更新规则为:

其中,α是学习率,决定了每一步调整的幅度。

项目实列之预测泰坦尼克号上乘客的生存情况

1:数据准备

        数据来源于Titanic - Machine Learning from Disaster | Kaggle,上面可以直接进行下载,如果以前没用过的话直接注册一个就可以了。里面有三个数据分别是训练集和测试集,以及幸存人数。训练集的数据如下所示(部分):

2:代码:

import pandas as pd#导入pandas用于读取数据
from matplotlib import pyplot as plt#用于绘制图像的库
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler#用于标准化
from sklearn.linear_model import LogisticRegression#导入逻辑回归库
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

# 1. 加载数据
train_data = pd.read_csv(r'C:\Users\35173\Desktop\train.csv')
test_data = pd.read_csv(r'C:\Users\35173\Desktop\test.csv')


# 2. 数据预处理
# 合并训练集和测试集以统一处理
data = pd.concat([train_data, test_data], sort=False)

# 删除不必要的列,如 'Name', 'Ticket', 'Cabin'
data = data.drop(['Name', 'Ticket', 'Cabin'], axis=1)

# 填补缺失值
data['Age'].fillna(data['Age'].mean(), inplace=True)
data['Embarked'].fillna(data['Embarked'].mode()[0], inplace=True)
data['Fare'].fillna(data['Fare'].mean(), inplace=True)

# 将类别特征转换为数值特征
data = pd.get_dummies(data, columns=['Sex', 'Embarked'], drop_first=True)

# 将数据分割回训练集和测试集
train_data = data[data['Survived'].notna()]
test_data = data[data['Survived'].isna()].drop(['Survived'], axis=1)

# 3. 特征选择与标签分离
X = train_data.drop('Survived', axis=1)
y = train_data['Survived']

# 4. 数据分割
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)

# 5. 特征缩放
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_val = scaler.transform(X_val)
test_data = scaler.transform(test_data)

# 6. 模型训练
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)

# 7. 预测与评估
y_val_pred = model.predict(X_val)
plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定中文字体为宋体
plt.rcParams['axes.unicode_minus'] = False
print("验证精度:", accuracy_score(y_val, y_val_pred))
print("混淆矩阵:\n", confusion_matrix(y_val, y_val_pred))
print("分类报告:\n", classification_report(y_val, y_val_pred))

# 8. 预测测试集
y_test_pred = model.predict(test_data)

3:结果:

4:解释

        验证精度是指模型在验证集上预测的准确度。它表示模型预测正确的样本数占总样本数的比例。混淆矩阵是一种可视化工具,用于总结分类模型的性能。它展示了实际标签和预测标签的对比情况。分类报告提供了更详细的分类性能指标,包括精确率、召回率和F1分数。(其中精确率表示在所有被预测为正类的样本中,实际为正类的比例。而召回率表示在所有实际为正类的样本中,被正确预测为正类的比例。F1分数是精确率和召回率的调和平均值,用于综合评估模型性能。)

结语:

在kaggle上这是一个有意思的比赛,有很多人将他的分类结果保存并上传感兴趣你也试一下吧。

参考

Titanic - Machine Learning from Disaster | Kaggle

机器学习之泰坦尼克号预测生还案例的分析(逻辑回归)_泰坦尼克号逻辑回归-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值