贝叶斯推断泰坦尼克号幸存
时间: 2025-01-07 18:19:51 浏览: 85
### 使用贝叶斯推断分析泰坦尼克号幸存者数据
#### 贝叶斯推断简介
贝叶斯推断是一种基于概率论的方法,用于更新关于未知参数的概率分布。这种方法通过结合先验知识和观测数据来计算后验分布。对于泰坦尼克号幸存者数据分析而言,可以利用乘客的各种特征(如年龄、性别、舱位等级等)作为输入变量,预测生存状态。
#### 数据准备
为了应用贝叶斯推断,在处理泰坦尼克号的数据集之前,需要对其进行预处理。这通常涉及清理缺失值、转换分类变量为数值表示形式以及标准化连续型特征[^1]。
```python
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
# 加载数据
data = pd.read_csv('titanic.csv')
# 处理缺失值并选择相关列
data['Age'].fillna(data['Age'].median(), inplace=True)
data.dropna(subset=['Embarked'], inplace=True)
X = data[['Pclass', 'Sex', 'Age']]
y = data['Survived']
# 创建Pipeline进行编码与缩放
preprocessor = ColumnTransformer(
transformers=[
('num', StandardScaler(), ['Age']),
('cat', OneHotEncoder(drop='first'), ['Pclass', 'Sex'])
])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
pipeline = Pipeline(steps=[('preprocessor', preprocessor)])
X_train_processed = pipeline.fit_transform(X_train)
```
#### 构建模型
采用朴素贝叶斯分类器实现简单的二元分类任务——判断某名乘客是否会生还。这里选择了高斯朴素贝叶斯算法,因为它适用于具有实数属性的数据集,并假设这些属性服从正态分布[^2]。
```python
from sklearn.naive_bayes import GaussianNB
model = GaussianNB()
model.fit(X_train_processed.toarray(), y_train)
```
#### 结果评估
完成训练之后,可以通过多种方式评价模型性能,比如查看混淆矩阵、精确度得分等指标。此外还可以绘制ROC曲线以直观展示不同阈值下的真阳性率和假阳性率之间的权衡关系[^3]。
```python
from sklearn.metrics import accuracy_score, confusion_matrix, roc_curve, auc
import matplotlib.pyplot as plt
def plot_roc(y_true, y_pred_proba):
fpr, tpr, _ = roc_curve(y_true, y_pred_proba[:, 1])
roc_auc = auc(fpr, tpr)
plt.figure(figsize=(8,6))
lw = 2
plt.plot(fpr, tpr, color='darkorange',
lw=lw, label=f'ROC curve (area = {roc_auc:.2f})')
plt.plot([0, 1], [0, 1], color='navy', lw=lw, 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')
plt.legend(loc="lower right")
plt.show()
X_test_processed = pipeline.transform(X_test).toarray()
predictions = model.predict(X_test_processed)
proba_predictions = model.predict_proba(X_test_processed)
print(confusion_matrix(y_test, predictions))
plot_roc(y_test.values, proba_predictions)
accuracy = accuracy_score(y_test, predictions)
print(f'The accuracy of the Naive Bayes classifier is {accuracy*100:.2f}%')
```
阅读全文
相关推荐










