数据分析之数据清洗与特征处理
数据分析之数据清洗与特征处理
上篇数据分析之数据载入与初步观察。
1 数据清洗
通常我们得到的数据需要清洗,即对数据中的缺失值、异常值等进行一定的处理,再进行字符串和数据转换等操作。在数据清洗完成后再进行分析或建模。
pandas使用浮点值NaN(Not a Number)表示缺失数据,称其为哨兵值。在进行浮点值判断时会有一些陷阱,参考博客:pandas中对nan空值的判断和陷阱。
1.1 缺失值的观察和处理
通常拿到的数据会有很多缺失值,比如上篇中我们用的泰坦尼克号数据集中Cabin列存在NaN,那其他列还有没有缺失值?这些缺失值要怎么处理呢?
首先导入工具包和数据: 1234import numpy as npimport pandas as pdtrain_data = pd.read_csv('train.csv') * a.缺失值观察
查看每个特征缺失值个数如下,根据输出发现Age,Cabin,Embarked列出现缺失值。
12## 方式一train_data.info()
输出:
12## 方式二train_data.isnul ...
数据分析之数据载入与初步观察
数据分析之数据载入与初步观察
目的:通过真实的数据以实战的方式了解数据分析的流程。
这里依托Kaggle上泰坦尼克号任务进行数据分析。
1 载入数据
1.1 数据集
数据集下载传送门。
Kaggle上关于该泰坦尼克号数据集中内容的描述:
数据变量解释:
1.2 数据载入
导入numpy和pandas:
12import numpy as npimport panda as pd
载入(读入)数据1:
12345## 使用相对路径载入数据(需要保证当前代码文件和数据文件在同一目录下)train_data = pd.read_csv('train.csv')## 使用绝对路径载入数据#train_data = pd.read_csv('D:\\研究生\\AI\\动手学数据分析\\第一单元项目集合\\train.csv')
在使用绝对路径载入数据时可能会出现错误:OSError: Initializing from file failed。这个问题的原因在这里是因为路径中含有中文。解决方法是在read_ ...
高斯分布(正态分布)
高斯分布
一堆数据X,\(x_i\)满足独立同分布,也就是\(x\sim\mathcal{N}(\mu,\Sigma)\)。
机器学习基础
机器学习基础
机器学习的基础之一便是概率。机器学习(统计学习)在《统计学习方法》(李航)一书中描述为:基于数据构建概率统计模型,并运用模型对数据进行预测和分析的方法。对于概率的诠释有两大学派,一类是频率派,另一类是贝叶斯派。
符号约定:数据集(观测集)采用记号 \[ X_{N\times p}=(x_{1},x_{2},\cdots,x_{N})^{T},x_{i}=(x_{i1},x_{i2},\cdots,x_{ip})^{T} \] 这个记号表示有\(N\)个样本,每个样本都是\(p\)维向量。其中,每个样本(观测)都是由\(p(x|\theta)\)生成的:\(x ~ p(x|\theta)\)。
1 频率派
频率派认为我们应该从样本去推测数据分布的参数(把数据看成概率模型):模型的参数\(\theta\)是未知的常量,\(x\)是随机变量。对于\(N\)个样本(观测)来说,样本集(观测集)的概率为 \(p(X|\theta)\mathop{=}\limits _{iid}\prod\limits {i=1}^{N}p(x{i}|\theta))\)。为了求出模 ...
VSCode上面进行Leetcode编程
VSCode上面进行Leetcode编程
1 VSCode配置Leetcode
1.1 安装node.js
首先需要安装node.js,node.js的下载-->传送门,根据自己的系统环境选择相应的版本。下载好之后直接安装,在安装过程的页面中有选择Add to PATH,默认勾选上,因为node.js需要添加到环境变量PATH中。
最后在命令行终端cmd(打开快捷键:win+R)中输入:node --version,输出版本号即安装node.js和添加到环境变量中成功了。
1.2 VSCode中安装Leetcode
在VSCode中的左边侧栏中的拓展(Extensions)中搜索:·LeetCode插件,然后点击安装(install)。
安装完成之后,重启VSCode。再打开VSCode就能看到左边侧栏最下面多出了LeetCode的logo符。
点击leetcode的logo符就能选择登录(sign in to LeetCode),点击登录之后输入账号和密码就可以了。登录之后,VSCode会自动下载leetcode上面的题目等内容,显示在左边列表中。
如 ...
GBDT
梯度提升决策树——GBDT(Gradient Boosting Decision Tree)
1 前向分布算法
梯度提升决策树GBDT算法的整体框架逻辑用到了前向分布算法。这里首先来看前向分布算法是什么。其实,在Adaboost传送门的算法中我们已经接触了它:
(1) 加法模型
在Adaboost算法中,每个基学习器(基分类器)合成一个复杂的学习器(分类器)的方式是通过对每个基学习器进行加权求和,即: \[f(x)=\sum_{m=1}^{M} \beta_{m} b\left(x ; \gamma_{m}\right)\]
其中,\(b\left(x ; \gamma_{m}\right)\)为即基分类器,\(\gamma_{m}\)为基分类器的参数,\(\beta_m\)为基本分类器的权重。从形式上很容易看出,这是一个加法模型。
给定了训练数据\(x\)以及损失函数\(L(y, f(x))\)的条件下,已知加法模型:\(f(x)=\sum_{m=1}^{M} \beta_{m} b\left(x ; \gamma_{m}\right)\),那么该任务的优化问题便是求解下 ...
Glyce:汉字字形词向量
《Glyce: Glyph-vectors for Chinese Character Representations》
Glyce:用于汉字表示的字形向量。
0 为什么要用汉字的字形?
因为对于类似汉字等等的象形文字来说,我们通常可以直接从字体的形状上来获取这个字的信息(对于我们早期的汉字来说--象形文字)。
1 Glyce简介:用于汉字表示的字形向量
对于类似汉字等等的象形文字来说,一般都会想要在NLP的各种任务中利用字体的形状上来获取这个字的信息。但是由于象形文字没有足够的丰富的证据再加上标准的计算机视觉模型在文字/字符上比较差的生成能力,所以亟待一种有效使用象形信息的方法。
论文《Glyce: Glyph-vectors for Chinese Character Representations》通过提出Glyce(Glyph-vectors for Chinese Character Representations)打破了这一僵住的局面。论文的主要创新点在于:
使用了各种历史汉字(例如:金文、篆书、繁体中文等等)来丰富文字中的象形信息。
为汉字图像处理专门 ...
小样本学习(Few-shot Learning)
小样本学习(Few-shot Learning)
1 什么是小样本学习(Few-shot Learning)?
对于人类来说,我们可以通过极少量的样本来认识一个新物体,比如通过几张图片就能认识火龙果和牛油果,并能对他们进行很好的区分。但是对于机器来说,传统的深度神经网络需要很多很多的图片(或者说数据)才能很好的学习到一个新物体的特征并进行不同物体的分类。
那么,机器学习模型在学习了一定类别的大量数据后,对于新的类别,只需要少量的样本就能快速学习,这就是小样本学习(Few-shot Learning)要达到的目标。Few-shot Learning是一种思想,它其实并不指代某种具体的算法或者模型,这种思想可以应用到很多场景,比如分类(classification),这时候便是Few-shot Classification。因为大部分都是将Few-shot Learning用在了分类上,所以一般它就直接代表Few-shot Classification。
2 N-way k-shot问题
通常,Few-shot Learning被描述为N-way k-shot问题,也就是:
...
语言模型(Language Model)
语言模型
1 什么是语言模型?
NLP中的语言模型(Language Model, LM)是用来计算一个句子是否合理(是否从语法上通顺),也就是一个句子出现的可能性大小(概率)。一个句子在生活中出现的可能性很小就代表这个句子不太符合规范或者语法等等。语言模型训练好之后可以应用在生成任务中的。
2 语言模型
我们已经知道语言模型用于计算一个句子是否合理,换句话说就是计算一个句子的概率。这个句子的概率越大说明它越可能比较符合我们说话的习惯,句子的概率越小就说明它可能在语法上是存在问题的。
那么我们就需要计算句子出现的概率p(s)。s是一个句子,把它分词后可以得到 \(w_1, w_2, w_3, w_4\).
开始计算:\(p(s) = p(w_1, w_2, w_3, w_4)\),利用chain rule可以知道:\(p(w_1, w_2, w_3, w_4) = p(w_1) \cdot p(w_2|w_1) \cdot p(w_3|w_1,w_2) \cdot p(w_4|w_1,w_2,w_3)\)。
由于长序列像\(w_1,w_2,w_3\)同时出现的可能性比较小 ...
位运算
位运算
1 什么是位运算?
计算机底层存储数据是以二进制的形式实现的,即0和1的组合。计算机对二进制数字进行的运算就是位运算。位运算的时候是对二进制数字的每一位进行的。
2 有哪些位运算?
位运算包含的种类如下,不同的位运算用于不同的位运算符:
位运算符
含义
举个栗子
运算规则
|
按位或
1010 | 0101 = 1111
按位或:两个位有一个为1时结果就为1,两个位全部为0时结果才为0
&
按位与
1010 & 0101 = 0000
按位与:两个位有一个为0时结果就是0,两个位全都为1时结果才为1
~
按位取反
~1010 = 0101
按位取反:0变成1,1变成0
^
按位异或
1001 ^ 0101 = 1100
按位异或:两个位相同时为0,不同时为1
>>
右移
0010 >> 1 = 0001
右移:所有的位向后移动n位(例子中代表移动一位)
<<
左移
0010 << 1 = ...