sklearn解决kaggle的titanic问题

1,代码如下:

# titanic Solution

# 1,prepare data
import imp
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.fft import rfft
import seaborn as sns
from IPython.display import Image
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import cross_val_score, train_test_split
# model
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
# 评估
from sklearn.metrics import classification_report
from sklearn.metrics import roc_curve

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
plt.rcParams['figure.figsize'] = (10, 6)  # 设置输出图片大小

data = pd.read_csv('pandas_learn/data/clear_data.csv')
train = pd.read_csv('pandas_learn/data/train.csv')

X = data
y = train['Survived']


X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)
# print(X_train.shape, X_test.shape)

# 2,Model Desgin
# 2.1,创建logisticregression模型,并用数据训练

# def __init__(self, penalty='l2', dual=False, tol=1e-4, C=1.0,
#     fit_intercept=True, intercept_scaling=1, class_weight=None,
#     random_state=None, solver='lbfgs', max_iter=100,
#     multi_class='auto', verbose=0, warm_start=False, n_jobs=None,
#     l1_ratio=None):

# penalty:正则化参数,三种取值:{‘l1’, ‘l2’, ‘elasticnet’, ‘none’}, default=’l2’
# C:正则强度的倒数;必须为正浮点数。与支持向量机一样,较小的值指定更强的正则化。
# class_weight:样本权重,可以是一个字典或者’balanced’字符串,默认为None。对于二分类模型,可以这样指定权重:class_weight={0:0.9,1:0.1},当class_weight=‘balanced’,那么类库会根据训练样本量来计算权重。某种类型样本量越多,则权重越低,样本量越少,则权重越高。
# solver:优化算法选择参数,五种取值:newton-cg,lbfgs,liblinear,sag,saga。default = liblinear。
# liblinear适用于小数据集,而sag和saga适用于大数据集因为速度更快。如果是L2正则化,那么4种可选的算法{‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’}都可以选择。但是如果penalty是L1正则化的话,就只能选择‘liblinear’了。
# max_iter: 算法收敛的最大迭代次数,即求取损失函数最小值的迭代次数,默认是100。

# lr = LogisticRegression().fit(X_train, y_train)
# print(lr.predict(X_test))
# print("训练集得分:{:.3f}".format(lr.score(X_train,y_train)))
# print("测试集得分:{:.3f}".format(lr.score(X_test,y_test)))

# 2.2,随机森林模型
# rf = RandomForestClassifier(n_estimators=100).fit(X_train, y_train)
# print(rf.predict(X_test))
# print("训练集得分:{:.3f}".format(rf.score(X_train,y_train)))
# print("测试集得分:{:.3f}".format(rf.score(X_test,y_test)))

# 3 模型评估
# 3.1 交叉验证
# lr = LogisticRegression()
# print(cross_val_score(lr,X_train,y_train,cv = 10))

# 3.2 混淆矩阵
lr = LogisticRegression().fit(X_train, y_train)
# y_pred = lr.predict(X_train)
# print(y_pred.sum())
# print(confusion_matrix(y_train,y_pred,labels=[0,1]))
# print(classification_report(y_train,y_pred))

fpr, tpr, thresholds = roc_curve(y_test, lr.decision_function(X_test))
plt.plot(fpr, tpr, label="ROC Curve")
plt.xlabel("FPR")
plt.ylabel("TPR (recall)")
# 找到最接近于0的阈值
close_zero = np.argmin(np.abs(thresholds))
plt.plot(fpr[close_zero], tpr[close_zero], 'o', markersize=10, label="threshold zero", fillstyle="none", c='k', mew=2)
plt.legend(loc=4)
plt.show()
全部评论

相关推荐

03-27 16:40
已编辑
门头沟学院 C++
26学院本太难了,很多公司机筛就给我刷了。机会都难拿到如果是简历存在问题也欢迎拷打————————————————————分割线——————————————————————2026.3.4更新:发完贴之后,时不时投递又收到了不少的笔试/面试邀请。主要是之前投递简历出去之后基本上都是沉默状态,年后好转了不少timeline:2026.01.21 文远知行笔试,半年多没刷算法题 ->挂 (后续HR说春招可以重新安排笔试)2026.2.4     小鹏汇天 技术一面,第二周收到结果 ->挂2026.2.12   大众Cariad代招 技术二面 ->Offer2026.2.28   多益网络技术面试,由于风评太差,一直在犹豫要不要接面试 ->推迟-----------分割线-----------2026.3 月前的某一天,临时去电网报名了二批计算机岗位的笔试2026.3.6 从上家公司实习离职,氛围最好的一家公司,leader 说可以帮忙转正,但是流程太长,而且我们部门据说只有一个 hc,更想要研究生,我很有可能是会被签外包公司在这里干活,就离职了。2026.3.9 入职新公司,大众Cariad 以外部公司的身份进组,项目组签了三年,后续三年应该都可以在这里呆,不知道有没有希望原地跳槽。2026.3.10 电网考试居然说我通过资格审查了,短信约我去参加资格审查,请假一天,买了 12 号晚上的机票回成都2026.3.15 参加国家电网计算机类笔试2026.3.17 电网出成绩了,感觉很低。觉得已经🈚️了2026.3.18 收到电网面试通知,通知 3.22-3.25 这个时间去面试,我的岗位只招 1 个人。据说面试只有 2-3 人,不知道能不能成功----------分割线-----------2026.3.21 电网面试结束,感觉回答的还勉勉强强,大概是2个岗位分别招1个人,一共11人面试,实际来了9人2026.3.27 出面试成绩,满分100分,早上10:20左右发现面试成绩46,我震惊了,没截图,后面过了十分钟重新看发现面试成绩给我改成58了。但同样震惊。朋友问我是不是把面试官打了,哈哈
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务