泰坦尼克乘客幸存者预测——逻辑回归

# load data
import numpy as np
import pandas as pd
df_train = pd.read_csv('/kaggle/input/titanic/train.csv')
df_test = pd.read_csv('/kaggle/input/titanic/test.csv')
# feature engineering
# 将类别特征拆分成多个哑特征
# 非数值类型的数据需要处理
a = pd.get_dummies(df_train['Pclass'], prefix = 'Pclass', dtype=int)  # dtype设为int不然默认是bool
A = pd.get_dummies(df_test['Pclass'], prefix = 'Pclass', dtype=int)
b = pd.get_dummies(df_train['Embarked'], prefix = 'Embarked', dtype=int)
B = pd.get_dummies(df_test['Embarked'], prefix = 'Embarked', dtype=int)
# 将哑特征添加进dataframe
frames = [df_train, a, b]
Frames = [df_test, A, B]
# 将dataframe整合
df_train = pd.concat(frames, axis=1)
df_test = pd.concat(Frames, axis=1)
# 删除意义重复的几列
df_train = df_train.drop(columns = ['Pclass', 'Embarked'])
df_test = df_test.drop(columns = ['Pclass', 'Embarked'])
# 把sex设置成数值类型
# df_train['Sex'][df_train['Sex'] == 'male'] = 1
# df_train['Sex'][df_train['Sex'] == 'female'] = 0
# df_test['Sex'][df_test['Sex'] == 'male'] = 1
# df_test['Sex'][df_test['Sex'] == 'female'] = 0
df_train.replace('male', 1, inplace=True)
df_train.replace('female', 0, inplace=True)
df_test.replace('male', 1, inplace=True)
df_test.replace('female', 0, inplace=True)
# feature engineering
# 去掉非数值类型的特征columns = ['Name', 'Ticket', 'Cabin']
# 将标签拆出df.Survived
X_train = df_train.drop(columns = ['Name', 'Ticket', 'Cabin', 'Survived'])
Y_train = df_train.Survived
# 测试集上没有标签
X_test = df_test.drop(columns = ['Name', 'Ticket', 'Cabin'])
# NAN值处理,因为测试集上也有部分NAN,所以不能暴力删除,这里用了线性插值的方法
X_train = X_train.interpolate(method='linear')
X_test = X_test.interpolate(method='linear')
# 看一下现在的特征表格
X_train.head()

# 将特征归一化
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
# 本身就是0/1的数据不参与归一化,所以先复制参与归一化的特征
x_train = X_train.drop(columns = ['Age', 'Fare'])
x_test = X_test.drop(columns = ['Age', 'Fare'])
A = X_train[['Age', 'Fare']]
B = X_test[['Age', 'Fare']]
a = pd.DataFrame(scaler.fit_transform(A))
b = pd.DataFrame(scaler.transform(B))
x_train = pd.concat([x_train, a], axis=1)
x_test = pd.concat([x_test, b], axis=1)
# 重命名,模型要求所有输入的特征名称必须是字符串,不能是数值
x_train.columns = ['PassengerId', 'Sex', 'SibSp', 'Parch', 'Pclass_1', 'Pclass_2', 'Pclass_3', 'Embarked_C', 'Embarked_Q', 'Embarked_S', 'Age', 'Fare']
x_test.columns = ['PassengerId', 'Sex', 'SibSp', 'Parch', 'Pclass_1', 'Pclass_2', 'Pclass_3', 'Embarked_C', 'Embarked_Q', 'Embarked_S', 'Age', 'Fare']

# 训练预测模型

from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(penalty='l2', C=100)
lr.fit(x_train, Y_train)
score = lr.score(x_train, Y_train)
print('训练集上的准确度 {:.2f}%'.format(score*100))

# 测试集进行预测

pred = pd.DataFrame(lr.predict(x_test))
y_test_pred = pd.concat([x_test["PassengerId"], pred], axis=1)
y_test_pred = y_test_pred.rename(columns = {0:'Survived'})
# 结果保存
output = y_test_pred.to_csv('output.csv')
预测结果
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值