1.先到Kaggle平台下载关于泰坦尼克号的数据。
泰坦尼克号数据集:这是Kaggle上的经典数据集,用于预测乘客是否幸存。
地址:Titanic - Machine Learning from Disaster | Kaggle
-
包含以下文件:
-
train.csv
:训练集(包含标签Survived
) -
test.csv
:测试集(不包含标签) -
gender_submission.csv
:示例提交文件
-
2. 使用 Kaggle 处理泰坦尼克号数据集
2.1 创建 Kaggle Notebook
-
登录 Kaggle 账号(如果没有账号,先注册)。
-
进入 Titanic 竞赛页面。
-
点击 Notebooks,然后选择 New Notebook。
-
Kaggle 会自动加载数据集,你可以在右侧的 Data 选项卡中看到
train.csv
和test.csv
。
3.详细实现代码+解释
import pandas as pd
# 加载训练集和测试集
train_data = pd.read_csv('kaggle_notebook/train.csv')
test_data = pd.read_csv('kaggle_notebook/test.csv')
# 查看数据
#print(train_data.head())
#print(test_data.head())
#train_data.describe()
# 填充缺失值(将文件中缺失的字段进行填充)
# fillna(): 这是一个Pandas函数,用于填充缺失值(NaN)。
# train_data['Age'].median(): 计算“Age”列的中位数(median)。中位数是数据集中间值,能够有效减少异常值的影响。
# inplace=True: 表示直接在原数据上进行修改,而不是返回一个新的DataFrame。
train_data['Age'].fillna(train_data['Age'].median(), inplace=True)
test_data['Age'].fillna(test_data['Age'].median(), inplace=True)
# train_data['Embarked'].mode()[0]: 计算“Embarked”列的众数(mode),即出现频率最高的值。
# [0]表示取众数列表中的第一个值(如果有多个众数)。
train_data['Embarked'].fillna(train_data['Embarked'].mode()[0], inplace=True)
test_data['Fare'].fillna(test_data['Fare'].median(), inplace=True)
# 提取Title特征
train_data['Title'] = train_data['Name'].str.extract(' ([A-Za-z]+)\.', expand=False)
test_data['Title'] = test_data['Name'].str.extract(' ([A-Za-z]+)\.', expand=False)
# 将类别特征转换为数值
train_data['Sex'] = train_data['Sex'].map({'male': 0, 'female': 1})
test_data['Sex'] = test_data['Sex'].map({'male': 0, 'female': 1})
# 删除不需要的特征
train_data.drop(['PassengerId', 'Name', 'Ticket', 'Cabin'], axis=1, inplace=True)
test_data.drop(['PassengerId', 'Name', 'Ticket', 'Cabin'], axis=1, inplace=True)
#查看训练数据类型
#train_data.info()
#print(train_data.describe())
#查看测试数据类型
#test_data.info()
#print(test_data.describe())
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
# 对分类变量进行标签编码(将存储的字符串数据转化成浮点数类型)
label_encoders = {}
for column in ['Title', 'Embarked']:
le = LabelEncoder()
train_data[column] = le.fit_transform(train_data[column])
label_encoders[column] = le # 保存编码器,方便后续解码
# 定义特征和目标变量(将不包含['Survived']属性的值赋值给X)
X = train_data.drop(['Survived'], axis=1)
#将['Survived']属性的值赋值给y
y = train_data['Survived']
# 划分训练集和验证集
# X: 特征数据(自变量),通常是一个二维数组或 DataFrame,每一行是一个样本,每一列是一个特征。
# y: 标签数据(因变量),通常是一个一维数组或 Series,表示每个样本的目标值(分类或回归的目标)。
# test_size=0.2: 指定验证集的比例。这里 0.2 表示将 20% 的数据作为验证集,剩下的 80% 作为训练集。
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练随机森林模型
# n_estimators=100: 指定随机森林中树的数量。这里设置为 100,表示模型将包含 100 棵决策树。
# random_state=42: 随机种子,用于确保每次运行代码时,模型的随机性是一致的(可重复性)。
model = RandomForestClassifier(n_estimators=100, random_state=42)
# X_train: 训练集的特征数据。
# y_train: 训练集的标签数据。
model.fit(X_train, y_train)
# 验证模型(hu)
accuracy = model.score(X_val, y_val)
print(f"Validation Accuracy: {accuracy:.2f}")
#对分类变量进行标签编码
test_data["Title"]=label_encoders["Title"].fit_transform(test_data["Title"])
test_data["Embarked"]=label_encoders["Embarked"].fit_transform(test_data["Embarked"])
# print(test_data)
# 预测测试集
predictions = model.predict(test_data)
# 生成提交文件
submission = pd.DataFrame({
'PassengerId': pd.read_csv('kaggle_notebook/test.csv')['PassengerId'],
'Survived': predictions,
"Name":pd.read_csv('kaggle_notebook/test.csv')['Name']
})
submission.to_csv('kaggle_notebook/submission.csv', index=False)
print(submission)
4. 训练数据中的特征
在泰坦尼克号数据集中,训练数据(train.csv
)包含以下特征(列):
-
PassengerId:乘客的唯一标识(对预测无用,通常删除)。
-
Survived:目标变量,表示是否存活(1 表示存活,0 表示未存活)。
-
Pclass:舱位等级(1 = 头等舱,2 = 二等舱,3 = 三等舱)。
-
Name:乘客姓名(对预测无用,但可以提取称呼作为新特征)。
-
Sex:性别(male/female)。
-
Age:年龄。
-
SibSp:兄弟姐妹和配偶的数量。
-
Parch:父母和子女的数量。
-
Ticket:船票编号(对预测无用,通常删除)。
-
Fare:票价。
-
Cabin:船舱号(对预测无用,通常删除)。
-
Embarked:登船港口(C = Cherbourg, Q = Queenstown, S = Southampton)。
2. 模型使用的特征(通过这些特征来预测用户的存活)
在代码中,模型使用的特征不仅仅是性别和年龄,而是所有对预测有帮助的特征。例如:
-
性别(Sex):转换为数值(0 表示男性,1 表示女性)。
-
年龄(Age):直接使用。
-
舱位等级(Pclass):直接使用。
-
兄弟姐妹和配偶数量(SibSp):直接使用。
-
父母和子女数量(Parch):直接使用。
-
票价(Fare):直接使用。
-
登船港口(Embarked):转换为数值(如 0、1、2)。