-
kaggle实战—泰坦尼克(一、数据分析)
-
kaggle实战—泰坦尼克(二、数据清洗及特征处理)
-
kaggle实战—泰坦尼克(三、数据重构)
-
kaggle实战—泰坦尼克(四、数据可视化)
-
kaggle实战—泰坦尼克(五、模型搭建-模型评估)
相信大家都有队pandas,numpy等数据科学库有一定了解,其中不乏有很多人有专门刷过相关课程或者看多相关书籍,例如《python for data analysis》。但是在实操过程中有很多函数还是得看着官方文档来进行敲写,既费时又费力 。最近刚好datawhale发起一个相关打卡活动——实战,我就报名参加了。(
ps:极力推荐这本书,大家可以去网上搜索电子版,或者也可以关注微信公众【浩波的笔记】回复data analysis来获取。
)
这次实践又比较偏模型和实战(
完成kaggle上泰坦尼克的任务
),直接给你一个任务,让你去完成,上手难度比较大,但是它的实战性可以让你对于什么是数据挖掘,以及数据挖掘的逻辑有很好的把握。所以有没有这样一门课,以项目为主线,将知识点孕育其中,通过边学,边做以及边被引导的方式来使学习效果达到更好,学完之后既能掌握pandas等的知识点又能掌握数据分析的大致思路和流程。通过调查发现,市面上这样的目好像没有可以完全符合这样的标准(失望.jpg)。
经过前面的探索性数据分析我们可以很清楚的了解到数据集的情况,以及得出了一些结论。下面我们将搭建一个预测模型,运用机器学习的方式来为泰坦尼克船只做一个预测,我们在测试集的数据中来预
测哪些乘客将会存活,哪些乘客将遭遇不幸。然后我们会对我们的模型做一个评价。
这次博客的内容可以学习到数据建模以及模型评价的知识,算是进阶的内容,为之后的数据分析打下基础。
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from IPython.display import Image
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['figure.figsize'] = (10, 6)
train = pd.read_csv('E:/python-project/deep-learning/datawhale/kaggle/tantatic/hands-on-data-analysis-master/data/train.csv')
train.shape
train.head()
任务一:缺失值填充
- 对分类变量缺失值:填充某个缺失值字符(NA)、用最多类别的进行填充
- 对连续变量缺失值:填充均值、中位数、众数
train['Cabin'] = train['Cabin'].fillna('NA')
train['Embarked'] = train['Embarked'].fillna('S')
train['Age'] = train['Age'].fillna(train['Age'].mean())
train.isnull().mean().sort_values(ascending=False)
任务二:编码分类变量
data = train[['Pclass','Sex','Age','SibSp','Parch','Fare', 'Embarked']]
data = pd.get_dummies(data)
data.head()
- 处理完前面的数据我们就得到建模数据,下一步是选择合适模型
- 在进行模型选择之前我们需要先知道数据集最终是进行监督学习还是无监督学习 3. 除了根据我们任务来选择模型外,还可以根据数据样本量以及特征的稀疏性来决定
- 刚开始我们总是先尝试使用一个基本的模型来作为其baseline,进而再训练其他模型做对比,最终选择泛化能力或性能比较好的模型
思考1. 数据集哪些差异会导致模型在拟合数据是发生变化
推荐阅读:欠拟合和过拟合以及如何选择模型https://blog.csdn.net/weixin_44023658/article/details/107618305
任务一:切割训练集和测试集
-
按比例切割训练集和测试集(一般测试集的比例有30%、25%、20%、15%和10%)
-
按目标变量分层进行等比切割
-
设置随机种子以便结果能复现
提示
-
切割数据集是为了后续能评估模型泛化能力
-
sklearn中切割数据集的方法为 train_test_split
-
查看函数文档可以在jupyter noteboo里面使用 train_test_split?
后回车即可看到
Docstring:
Split arrays or matrices into random train and test subsets
Quick utility that wraps input validation and
``next(ShuffleSplit().split(X, y))`` and application to input data
into a single call for splitting (and optionally subsampling) data in a
oneliner.
Read more in the :ref:`User Guide <cross_validation>`.
-
分层和随机种子在参数里寻找
思考
-
什么情况下切割数据集的时候不用进行随机选取
在数据集比较大而且重复实验并不需要全部数据集时一般不要这么做,数量太小时也不推荐
from sklearn.model_selection import train_test_split
X = data
y = train['Survived']
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)
X_train.shape, X_test.shape
train_test_split例子
X_train,X_test,y_train,y_test=cross_validation.train_test_split(train_data,train_target,test_size=0.4, random_state=0)
rain_data:所要划分的样本特征集
train_target:所要划分的样本结果
test_size:样本占比,如果是整数的话就是样本的数量
random_state:是随机数的种子。
随机数种子:其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如你每次都填1,
其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。
随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:
种子不同,产生不同的随机数;种子相同,即使实例不同也产生相同的随机数
>>> import numpy as np
>>> from sklearn.model_selection import train_test_split
>>> X, y = np.arange(10).reshape((5, 2)), range(5)
array([[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8, 9]])
>>> list(y)
[0, 1, 2, 3, 4]
>>> X_train, X_test, y_train, y_test = train_test_split(
... X, y, test_size=0.33, random_state=42)
...
>>> X_train
array([[4, 5],
[0, 1],
[6, 7]])
>>> y_train
[2, 0, 3]
>>> X_test
array([[2, 3],
[8, 9]])
>>> y_test
[1, 4]
>>> train_test_split(y, shuffle=False)
[[0, 1, 2], [3, 4]]
任务二:模型创建
- 创建基于线性模型的分类模型(逻辑回归)
- 创建基于树的分类模型(决策树、随机森林)
- 查看模型的参数,并更改参数值,观察模型变化
提示
4. 逻辑回归不是回归模型而是分类模型,不要与 LinearRegression
混淆
5. 随机森林其实是决策树集成为了降低决策树过拟合的情况
6. 线性模型所在的模块为 sklearn.linear_model
7. 树模型所在的模块为 sklearn.ensemble
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
lr = LogisticRegression()
lr.fit(X_train, y_train)
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
intercept_scaling=1, l1_ratio=None, max_iter=100,
multi_class='auto', n_jobs=None, penalty='l2',
random_state=None, solver='lbfgs', tol=0.0001, verbose=0,
warm_start=False)
print("Training set score: {:.2f}".format(lr.score(X_train, y_train)))
print("Testing set score: {:.2f}".format(lr.score(X_test, y_test)))
lr2 = LogisticRegression(C=100)
lr2.fit(X_train, y_train)
LogisticRegression(C=100, class_weight=None, dual=False, fit_intercept=True,
intercept_scaling=1, l1_ratio=None, max_iter=100,
multi_class='auto', n_jobs=None, penalty='l2',
random_state=None, solver='lbfgs', tol=0.0001, verbose=0,
warm_start=False)
print("Training set score: {:.2f}".format(lr2.score(X_train, y_train)))
print("Testing set score: {:.2f}".format(lr2.score(X_test, y_test)))
rfc = RandomForestClassifier()
rfc.fit(X_train, y_train)
RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,
criterion='gini', max_depth=None, max_features='auto',
max_leaf_nodes=None, max_samples=None,
min_impurity_decrease=0.0, min_impurity_split=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, n_estimators=100,
n_jobs=None, oob_score=False, random_state=None,
verbose=0, warm_start=False)
print("Training set score: {:.2f}".format(rfc.score(X_train, y_train)))
print("Testing set score: {:.2f}".format(rfc.score(X_test, y_test)))
rfc2 = RandomForestClassifier(n_estimators=100, max_depth=5)
rfc2.fit(X_train, y_train)
RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,
criterion='gini', max_depth=5, max_features='auto',
max_leaf_nodes=None, max_samples=None,
min_impurity_decrease=0.0, min_impurity_split=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, n_estimators=100,
n_jobs=None, oob_score=False, random_state=None,
verbose=0, warm_start=False)
print("Training set score: {:.2f}".format(rfc2.score(X_train, y_train)))
print("Testing set score: {:.2f}".format(rfc2.score(X_test, y_test)))
任务三:输出模型预测结果
- 输出模型预测分类标签
- 输出不同分类标签的预测概率
提示 - 一般监督模型在sklearn里面有个 predict 能输出预测标签, predict_proba 则可以输出标签概率
思考 - 预测标签的概率对我们有什么帮助
来查看我们模型的优劣,也可以进行问题转换
pred = lr.predict(X_train)
pred[:10]
pred_proba = lr.predict_proba(X_train)
pred_proba[:10]
array([[0.62887291, 0.37112709],
[0.14897206, 0.85102794],
[0.47162003, 0.52837997],
[0.20365672, 0.79634328],
[0.86428125, 0.13571875],
[0.9033887 , 0.0966113 ],
[0.13829338, 0.86170662],
[0.89516141, 0.10483859],
[0.05735141, 0.94264859],
[0.13593291, 0.86406709]])
- 模型评估是为了知道模型的泛化能力。
- 交叉验证(cross-validation)是一种评估泛化性能的统计学方法,它比单次划分训练集和测试集的方法更加稳
定、全面。 - 在交叉验证中,数据被多次划分,并且需要训练多个模型。
- 最常用的交叉验证是 k 折交叉验证(k-fold cross-validation),其中 k 是由用户指定的数字,通常取 5 或 10。 5. 准确率(precision)度量的是被预测为正例的样本中有多少是真正的正例
- 召回率(recall)度量的是正类样本中有多少被预测为正类
- f-分数是准确率与召回率的调和平均
任务一:交叉验证
注:还对交叉验证不清楚同学建议先阅读:机器学习面试题集 - 详解四种交叉验证方法
7. 用10折交叉验证来评估逻辑回归模型
8. 计算交叉验证精度的平均值
提示
9. 交叉验证在sklearn中的模块为 sklearn.model_selection
思考
10. k折越多的情况下会带来什么样的影响?
k折越多为留一法,是K折的另一种极端情况,即K=n。随着K值的不断升高,单一模型评估时的方差逐渐加大而偏差减小。但从总体模型角度来看,反而是偏差升高了而方差降低了。
推荐阅读:「交叉验证」到底如何选择K值?
from sklearn.model_selection import cross_val_score
lr = LogisticRegression(C=100)
scores = cross_val_score(lr, X_train, y_train, cv=10)
scores
array([0.82089552, 0.7761194 , 0.82089552, 0.79104478, 0.85074627,
0.86567164, 0.73134328, 0.86567164, 0.75757576, 0.6969697 ])
print("Average cross-validation score: {:.2f}".format(scores.mean()))
任务二:混淆矩阵
- 计算二分类问题的混淆矩阵
- 计算精确率、召回率以及f-分数
关于混淆矩阵介绍,推荐阅读:混淆矩阵是什么意思?
提示
- 混淆矩阵的方法在sklearn中的 sklearn.metrics 模块
- 混淆矩阵需要输入真实标签和预测标签
from sklearn.metrics import confusion_matrix
pred = lr.predict(X_train)
confusion_matrix(y_train, pred)
array([[354, 58],
[ 72, 184]], dtype=int64)
from sklearn.metrics import classification_report
print(classification_report(y_train, pred))
precision recall f1-score support
0 0.83 0.86 0.84 412
1 0.76 0.72 0.74 256
accuracy 0.81 668
macro avg 0.80 0.79 0.79 668
weighted avg 0.80 0.81 0.80 668
任务三:ROC曲线
推荐阅读:机器学习基础(1)- ROC曲线理解
- 绘制ROC曲线
提示 - ROC曲线在sklearn中的模块为 sklearn.metrics
- ROC曲线下面所包围的面积越大越好
思考 - 对于多分类问题如何绘制ROC曲线
还是看这篇文章吧:多分类下的ROC曲线和AUC
from sklearn.metrics import roc_curve
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)")
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)
kaggle实战—泰坦尼克(一、数据分析)kaggle实战—泰坦尼克(二、数据清洗及特征处理)kaggle实战—泰坦尼克(三、数据重构)kaggle实战—泰坦尼克(四、数据可视化)kaggle实战—泰坦尼克(五、模型搭建-模型评估)前言相信大家都有队pandas,numpy等数据科学库有一定了解,其中不乏有很多人有专门刷过相关课程或者看多相关书籍,例如《python for data analysis》。但是在实操过程中有很多函数还是得看着官方文档来进行敲写,既费时又费力 。最近刚好data.
kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。
kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。
第三章 模型搭建和评估–建模
经过前面的两章的知识点的学习,我可以对数数据的本身进行处理,比如数据本身的增删查补,还可以做必要的清洗工作。那么下面我们就要开始使用我们前面处理好的数据了。这一章我们要做的就是使用数据,我们做数据分析的目的也就是,运用我们的数据以及结合我的业务来得到某些我们需要知道的结果。那么分析的第一步就是建模,搭建一个预测模型或者其他模型;我们从这个模型的到结果之后,我们要分析我的模型是不是足够的可靠,那我就需要评估这个模型。今天我们学习建模,下一节我们学习评估。
我们拥有的泰坦尼克号的数
添加正则化项,是指在损失函数上添加正则化项,而正则化项可分为两种:
一种是L1正则化项,另一种是L2正则化.我们把带有L2正则化项的回归模型称为岭回归,带有L1正则化项的回归称为Lasso回归.1.岭回归引用百度百科定义.岭回归(英文名:ridgeregression,Tikhonov
regularization)是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价获得
我的解决方案使用1024px调整大小的数据集。 您有两个选择。
下载原始数据集(约192 GB)并创建调整大小的数据集。
或下载已经制作的kaggle公开数据集(3.59 GB)。
选项1-下载原始数据集并创建1024px调整大小的数据集
下载原始竞赛数据。 并解压缩zip文件。
kaggle competitions download -c vinbigdata-chest-xray-abnormalities-detection
unzip vinbigdata-chest-xray-abnormalities-detection.zip -d dataset
创建调整大小的1024px数据集。 它将保存到“ dataset-jpg”文件夹中。
经过前面的两章的知识点的学习,我可以对数数据的本身进行处理,比如数据本身的增删查补,还可以做必要的清洗工作。那么下面我们就要开始使用我们前面处理好的数据了。这一章我们要做的就是使用数据,我们做数据分析的目的也就是,运用我们的数据以及结合我的业务来得到某些我们需要知道的结果。那么分析的第一步就是建模,搭建一个预测模型或者其他模型;我们从这个模型的到结果之后,我们要分析我的模型是不是足够的可靠,那我就需要评估这个模型。今天我们学习建模,下一节我们学习评估。
导入库和一些预先的准备
import pa
1)输入层:用于数据的输入
2)卷积层:使用卷积核进行特征提取和特征映射------>可以多次重复使用
3)激励层:由于卷积也是一种线性运算,因此需要增加非线性映射(也就是激活函数)
4)池化层:进行下采样,对特征图稀疏处理,减少数据运算量----->可以多次重复使用
5)Flatten操作:将二维的向量,拉直为一维的向量,从而可以放入下一层的神经网络中
6)全连接层:通常在CNN的尾部进行重新拟合,减少特征信息的损失----->D
(文章同步更新于个人博客@dai98.github.io)
源代码: Github Kaggle
泰坦尼克幸存者预测是Kaggle上数据竞赛的入门级别的比赛,我曾经在一年前作为作业参加过这个比赛,我想要再次从这个比赛开始,尝试不同的模型,来当作在Kaggle比赛的起点。
关于此次竞赛,我想分成两个部分,第一个部分基于PyTorch建立神经网络,第二个部分使用sklearn做多个分类器投票。
使用的编程环境及依赖包版本:
import matplotlib
from matplotlib import pyplot as plt
import seaborn as sns
import
RMS泰坦尼克号的沉没是历史上最臭名昭着的沉船之一。1912年4月15日,在她的处女航中,泰坦尼克号在与冰山相撞后沉没,在2224名乘客和机组人员中造成1502人死亡。这场耸人听闻的悲剧震惊了国际社会,并导致了更好的船舶安全规定。
造成海难失事的原因之一...
from sklearn.linear_model import LogisticRegression
#随机分割数据集
from sklearn.model_selection import train_test_split
#输出模型评估报告
from sklearn.metrics import classification_report
#相当于把“泰坦尼
泰坦尼克号问题是一个经典的二分类问题,即预测乘客是否能在泰坦尼克号沉船事故中生还。以下是机器学习Kaggle实战-泰坦尼克号问题的知识梳理:
1. 数据探索与可视化:首先需要对数据进行探索性数据分析(EDA),了解数据的特征、缺失值、异常值等情况,并使用可视化工具(如Matplotlib、Seaborn)对数据进行可视化。
2. 特征工程:根据数据探索的结果,对原始数据进行特征选择、特征提取、特征变换等操作,以便更好的训练机器学习模型。
3. 模型选择与训练:选择适当的机器学习模型,如逻辑回归、决策树、随机森林等,并对数据进行训练和调参。可以使用Python中的Scikit-learn库进行模型训练。
4. 模型评估:使用交叉验证、ROC曲线、混淆矩阵等方法对模型进行评估,并选择适当的评价指标(如准确率、精确率、召回率等)。
5. 模型融合:将多个模型进行融合,以达到更好的预测效果。可以使用Stacking、Blending、Bagging、Boosting等方法进行模型融合。
6. 提交结果:将预测结果提交到Kaggle上,查看在测试集上的预测准确率,并与其他选手进行排名比较。
以上就是机器学习Kaggle实战-泰坦尼克号问题的知识梳理,希望对你有所帮助。