Titanic生存预测攻略
一、前言
泰坦尼克号作为Kaggle经典项目,被拿来做考核或者实验非常多,也是机器学习入门的一个很好的项目。我们机器学习的老师也是直接用这个项目来做考核。
他分工分成了数据处理、模型搭建、PPT制作和文档制作,但是鄙人认为,数据处理与模型搭建密不可分的,比如说在决策树模型中,是不在乎数据实际差值的,但是SVM逻辑回归等算法,如果不用较好的数据变换,基本是没准确度的。
基本上数据处理用了2个小时基本就搞定了,也参考了很多别人的题解,不过我都是自己再写了一遍,代码量不大很好处理。模型搭建其实也就是调用一下sklearn库,我自己认为对于这种比较难以估计的真实情况,而且数据特征、样本量都比较少。把注意力花在调参上,没有什么大的突破。所以我只是为了学习操作流程,把各个模型拿出来,意思意思过一下罢了。菜不行,再怎么烹饪,也煮不出东西来。
本质上这个项目,就是一个入门项目,学习机器学习/数据挖掘的一个过程。差不多得了hhhh。
二、环境搭建
本次实验使用的是
window11(操作系统)
python 3.9(python语言)
jupyter notebook(编辑器很方便)
copy(用来复 ...
python模拟缓冲区进度条
实验步骤
点击【桌面连接】进入实验环境。
1 开发准备
1.1 打开编程IDE-Spyder
双击桌面上的【LXTerminal】打开终端
切换到root用户
1sudo su
紧接着粘贴student用户的密码,方法参见4.1小节。
敲入如下命令启动Spyder:
1spyder
将Spyder的工作目录设置为/root(默认为/root),如下图所示:
图1 Spyder工作目录
1.2 再打开一个新的终端
我们编写程序是在IDE(比如Spyder)下实现,但是我们运行程序一般都是在终端运行的,即命令行模式下运行。原因很简单,把程序部署在服务器后,程序总不能在Spyder里面跑,一定是在命令行模式下跑。
在本实验中,编写代码在Spyder环境下,运行程序在终端环境下。
再打开一个终端的步骤如下:
双击桌面上的【LXTerminal】打开终端
切换到root用户
1sudo su
紧接着粘贴student用户的密码。
进入到代码所在目录
1cd /root
后面我们称这个终端叫新打开的终端。
2 原理探究
我们都知道电影的原理,连续的画面是由一帧帧 ...
集成学习
集成学习
集成学习(Ensemble Learning)是机器学习中的一种思想,通过多个模型的组合形成一个精度更高的模型。
参与组合的模型为弱学习器(Weak Learner)。在预测时使用这些弱学习器模型联合进行预测。集成学习模型在训练时需要用训练样本依次训练出这些弱学习器。
集成学习在各个规模的数据集上都有很好的策略。
数据集大:划分成多个小数据集,学习多个模型进行组合
数据集小:利用Bootstrap方法进行抽样,得到多个数据集,分别训练多个模型再进行组合
voting投票机制
思路
投票机制(voting)是集成学习里面针对分类问题的一种结合策略,基本思想是融合多个数据来降低误差。
对于回归模型:投票法最终的预测结果是多个其他回归模型预测结果的平均值。
对于分类模型:硬投票法的预测结果是多个模型预测结果中出现次数最多的类别,软投票对各类预测结果的概率求和,最终选取概率之和的最大的类标签。
原理分析
投票法是通过多个模型的集成降低方差,从而提高模型的鲁棒性。
对于分类投票法,根据输出的两种类型:输出类标签和输出类概率,将前者称为硬投票(Majority/Hard votin ...
K折交叉验证
K折交叉验证
K-Fold Cross Validation K折交叉验证,将原始数据分成K组(一般是均分),将每个子集数据分别做一次测试集,其余K-1组子集数据作为训练集。这样可得到K个模型/
用这K个模型最终在验证集的评估指标分数(如准确率、R2)平均数作为偏差,评估指标分数的标准差作为方差。
静态的「留出法」对数据的划分方式比较敏感,有可能不同的划分方式得到了不同的模型。「k 折交叉验证」是一种动态验证的方式,这种方式可以降低数据划分带来的影响。具体步骤如下:
将数据集分为训练集和测试集,将测试集放在一边
将训练集分为 k 份
每次使用 k 份中的 1 份作为验证集,其他全部作为训练集。
通过 k 次训练后,我们得到了 k 个不同的模型。
评估 k 个模型的效果,从中挑选效果最好的超参数
使用最优的超参数,然后将 k 份数据全部作为训练集重新训练模型,得到最终模型。
1.使用 train/test split 进行模型评估的缺点
Train/test split 是将原始数据集划分为训练集/测试集,避免了为了追求高准确率而在训练集上产生过拟合,从而使得模型在样本外的数据上预测准 ...
超参数
超参数
【1】超参数的“学院派”定义:
在机器学习的过程中,
超参= 在开始机器学习之前,就人为设置好的参数。
模型参数=通过训练得到的参数数据。
通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果
【2】怎么决定超参数?
定义关于模型的更高层次的概念,如复杂性或学习能力。
不能直接从标准模型培训过程中的数据中学习,需要预先定义。
可以通过设置不同的值,训练不同的模型和选择更好的测试值来决定
【3】超参数的“通俗”定义:
超参数也是一种参数,它具有参数的特性,比如未知,也就是它不是一个已知常量。
是一种手工可配置的设置,需要为它根据已有或现有的经验,指定“正确”的值,也就是人为为它设定一个值,它不是通过系统学习得到的。
【4】超参数的一些示例:
聚类中类的个数
话题模型中话题的数量
模型的学习率
.深层神经网络隐藏层数的数量或树的深度
矩阵分解中潜在因素的数量
k均值聚类中的簇数
模型优化本质
模型优化就是通过调整模型超参数使得模型性能打到最优。
手动调参
网格搜索法(Grid Search):穷举搜索指定参数值,将尝试每个参数的 ...
损失函数补充
损失函数–定义函数模型的好坏
损失函数(Loss Function)
摘要:
本文主要介绍几个机器学习中常用的损失函数,解释其原理,性能优缺点和适用范围。
目录:
什么是损失函数?
为什么要用损失函数?
有哪些损失函数?
基于距离度量的损失函数
均方误差损失函数(MSE)
L2损失函数
L1损失函数
Smooth L1损失函数
huber损失函数
基于概率分布度量的损失函数
KL散度函数(相对熵)
交叉熵损失
softmax损失函数
Focal loss
如何选择损失函数?
参考资料
1. 什么是损失函数?
一言以蔽之,损失函数(loss function)就是用来度量模型的预测值f(x)与真实值Y的差异程度的运算函数,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好。
2. 为什么使用损失函数?
损失函数使用主要是在模型的训练阶段,每个批次的训练数据送入模型后,通过前向传播输出预测值,然后损失函数会计算出预测值和真实值之间的差异值,也就是损失值。得到损失值之后,模型通过反向传播去更新各个参数,来降低真实值与预测值 ...
定量变量与定性变量的转换
定量变量和定性变量的转换(Transform of Quantitative & Qualitative Variables)
定量变量(Quantitative Variables):也称为数值型变量(Numerical Variables),可以用连续值或离散值表示。比如:气温(连续值),学生人数(离散值)。
为什么要对定量变量进行转换?大多数情况下,我们可以直接使用定量变量。但是有时候,特征和目标之间不呈线性关系。比如说年龄和收入之间的关系,当人年轻时,收入通常会稳步上升,但到了一定年纪之后,收入便开始降低。我们当然可以用非线性模型来拟合数据,但是这样会把模型弄得很复杂。因此比较好的做法是在数据准备的阶段就对定量变量做分箱处理(Binning,也称为分区间)。在对定量变量分箱处理之后,还要再将其转换为虚拟变量或对其进行WOE转换(参见:https://zhuanlan.zhihu.com/p/30026040)。
将定量变量转换为定性变量的方法为:分区间(Binning),包括等宽分区间以及自适应分区间。
等宽分区间(Fixed-Width Binning):可以用p ...
决策树算法补充
四类常见的机器学习算法:
ID3算法 : 信息增益
C4.5算法: 信息增益率
C5.0
CART: 基尼系数
首先我们先简单介绍一下决策树,
决策树算法在“决策”领域有着广泛的应用,比如个人决策、公司管理决策等。其实更准确的来讲,决策树算法算是一类算法,这类算法逻辑模型以“树形结构”呈现,因此它比较容易理解,并不是很复杂,我们可以清楚的掌握分类过程中的每一个细节。
if-else原理
想要认识“决策树算法”我们不妨从最简单的“if - else原理”出发来一探究竟。作为程序员,我相信你对 if -else 原理并不感到陌生,它是
条件判断
的常用语句。下面简单描述一下 if -else 的用法:if 后跟判断条件,如果判断为真,也即满足条件,就执行 if 下的代码段,否则执行 else 下的代码段,因此 if-else 可以简单的理解为“如果满足条件就…,否则…”
if-else 有两个特性:一是能够利用 if -else 进行条件判断,但需要首先给出判断条件;二是能无限嵌套,也就是在一个 if-else 的条件执行体中,能够再嵌套另外一个 if-else,从而实现无限循环嵌套 ...
朴素贝叶斯算法
概率论的知识,用来做分类比较多,本质上是属于求后验概率。前提是属性之间相互独立。
贝叶斯定理
贝叶斯定理的发明者
托马斯·贝叶斯
提出了一个很有意思的假设:“如果一个袋子中共有 10 个球,分别是黑球和白球,但是我们不知道它们之间的比例是怎么样的,现在,仅通过摸出的球的颜色,是否能判断出袋子里面黑白球的比例?”
上述问题可能与我们高中时期所接受的的概率有所冲突,因为你所接触的概率问题可能是这样的:“一个袋子里面有 10 个球,其中 4 个黑球,6 个白球,如果你随机抓取一个球,那么是黑球的概率是多少?”毫无疑问,答案是 0.4。这个问题非常简单,因为我们事先知道了袋子里面黑球和白球的比例,所以很容易算出摸一个球的概率,但是在某些复杂情况下,我们无法得知“比例”,此时就引出了贝叶斯提出的问题。
在统计学中有两个较大的分支:一个是“频率”,另一个便是“贝叶斯”,它们都有各自庞大的知识体系,而“贝叶斯”主要利用了“相关性”一词。下面以通俗易懂的方式描述一下“贝叶斯定理”:通常,事件 A 在事件 B 发生的条件下与事件 B 在事件 A 发生的条件下,它们两者的概率并不相同,但是它们两者之间 ...
岭回归和LASSO回归,线性回归
线性回归很简单,用线性函数拟合数据,用 mean square error (mse) 计算损失(cost),然后用梯度下降法找到一组使 mse 最小的权重。
lasso 回归和岭回归(ridge regression)其实就是在标准线性回归的基础上分别加入 L1 和 L2 正则化(regularization)。
本文的重点是解释为什么 L1 正则化会比 L2 正则化让线性回归的权重更加稀疏,即使得线性回归中很多权重为 0,而不是接近 0。或者说,为什么 L1 正则化(lasso)可以进行 feature selection,而 L2 正则化(ridge)不行。
线性回归——最小二乘
线性回归的拟合函数(或 hypothesis)为:
f(x)=wTx+bf(x) = w^Tx+b
f(x)=wTx+b
cost function (mse) 为:
J=1n∑i=1n(f(xi)−yi)2=1n∑i=1n(w⊤xi+b−yi)2\begin{aligned}
J &=\frac{1}{n} \sum_{i=1}^{n}\left(f\left(\boldsymbol{x}_ ...