数据科学笔记

https://developers.google.cn/machine-learning/crash-course/training-and-test-sets/splitting-data

零-均值规范化(z-score标准化)

零-均值规范化也称标准差标准化,经过处理的数据的均值为0,标准差为1。转化公式为:

其中为原始数据的均值,为原始数据的标准差,是当前用得最多的数据标准化方式。标准差分数可以回答这样一个问题:"给定数据距离其均值多少个标准差"的问题,在均值之上的数据会得到一个正的标准化分数,反之会得到一个负的标准化分数。

 比如X的单位是米,Y也是米,那么距离算出来的单位还是米,是有意义的 但是如果X是米,Y是吨,用距离公式计算就会出现“米的平方”加上“吨的平方”再开平方,最后算出的东西没有数学意义,这就有问题了。 还有,即使X和Y单位一致,但是如果数据中X整体都比较小,比如都是1到10之间的数,Y很大,比如都是1000以上的数,那么,在计算距离的时候Y起到的作用就比X大很多,X对于距离的影响几乎可以忽略,这也有问题。 因此,如果K-Means聚类中选择欧几里德距离计算距离,数据集又出现了上面所述的情况,就一定要进行数据的标准化(normalization),即将数据按比例缩放,使之落入一个小的特定区间。去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行计算和比较。 标准化方法最常用的有两种:

  • min-max标准化(离差标准化):对原始数据进行线性变换,是结果落到【0,1】区间,转换方法为 X'=(X-min)/(max-min),其中max为样本数据最大值,min为样本数据最小值。
  • z-score标准化(标准差标准化):处理后的数据符合标准正态分布(均值为0,方差为1),转换公式:X减去均值,再除以标准差

 

 箱线图检测异常值

  和3σ原则相比,箱线图依据实际数据绘制,真实、直观地表现出了数据分布的本来面貌,且没有对数据作任何限制性要求(3σ原则要求数据服从正态分布或近似服从正态分布),其判断异常值的标准以四分位数和四分位距为基础。四分位数给出了数据分布的中心、散布和形状的某种指示,具有一定的鲁棒性,即25%的数据可以变得任意远而不会很大地扰动四分位数,所以异常值通常不能对这个标准施加影响。鉴于此,箱线图识别异常值的结果比较客观,因此在识别异常值方面具有一定的优越性。

  箱型图提供了识别异常值的一个标准,即异常值通常被定义为小于QL-1.5IQR或大于QU+1.5IQR的值。其中,QL称为下四分位数,表示全部观察值中有四分之一的数据取值比它小;QU称为上四分位数,表示全部观察值中有四分之一的数据取值比它大;IQR称为四分位数间距,是上四分位数QU与下四分位数QL之差,其间包含了全部观察值的一半。

 

KNN 算法
KNN 算法是Cover 和Hart 于1968 年提出的理论上比较成熟的方法,为十大挖掘算法之一。该算法的思路非常简单直观:如果一个样本在特征空间中的k 个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。

SVM算法
SVM 算法是建立在统计学习理论基础上的机器学习方法,为十大数据挖掘算法之一。通过学习算法,SVM 可以自动寻找出对分类有较好区分能力的支持向量,由此构造出的分类器可以最大化类与类的间隔,因而有较好的适应能力和较高的分准率。SVM 算法的目的在于寻找一个超平面H,该超平面可以将训练集中的数据分开,且与类域边界的沿垂直于该超平面方向的距离最大,故SVM 法亦被称为最大边缘算法。

分类和聚类的区别:

简单地说,分类(Categorization or Classification)就是按照某bai种标准给对du象贴标签(label),再根据标签来区分zhi归类。
简单地说,聚类是指事先没有“标dao签”而通过某种成团分析找出事物之间存在聚集性原因的过程。
区别是,分类是事先定义好类别 ,类别数不变 。分类器需要由人工标注的分类训练语料训练得到,属于有指导学习范畴。聚类则没有事先预定的类别,类别数不确定。 聚类不需要人工标注和预先训练分类器,类别在聚类过程中自动生成 。分类适合类别或分类体系已经确定的场合,比如按照国图分类法分类图书;聚类则适合不存在分类体系、类别数不确定的场合,一般作为某些应用的前端,比如多文档文摘、搜索引擎结果后聚类(元搜索)等。

分类:分类其实是从特定的数据中挖掘模式,作出判断的过程。比如Gmail邮箱里有垃圾邮件分类器,一开始的时候可能什么都不过滤,在日常使用过程中,我人工对于每一封邮件点选“垃圾”或“不是垃圾”,过一段时间,Gmail就体现出一定的智能,能够自动过滤掉一些垃圾邮件了。这是因为在点选的过程中,其实是给每一条邮件打了一个“标签”,这个标签只有两个值,要么是“垃圾”,要么“不是垃圾”,Gmail就会不断研究哪些特点的邮件是垃圾,哪些特点的不是垃圾,形成一些判别的模式,这样当一封信的邮件到来,就可以自动把邮件分到“垃圾”和“不是垃圾”这两个我们人工设定的分类的其中一个。

聚类:聚类的目的也是把数据分类,但是事先我是不知道如何去分的,完全是算法自己来判断各条数据之间的相似性,相似的就放在一起。在聚类的结论出来之前,我完全不知道每一类有什么特点,一定要根据聚类的结果通过人的经验来分析,看看聚成的这一类大概有什么特点。

聚类和分类最大的不同在于:分类的目标是事先已知的,而聚类则不一样,聚类事先不知道目标变量是什么,类别没有像分类那样被预先定义出来。

 

决策树

  决策树是一种树型结构,其中每个内部节结点表示在一个属性上的测试,每一个分支代表一个测试输出,每个叶结点代表一种类别。

  决策树学习是以实例为基础的归纳学习

  决策树学习采用的是自顶向下的递归方法,其基本思想是以信息熵为度量构造一棵熵值下降最快的树。到叶子节点的处的熵值为零,此时每个叶结点中的实例都属于同一类。

 

分类算法和回归算法的不同 :输出类型:分类的输出是离散值,回归的输出是连续值。可以错误的认为分类处理的是离散问题,回归处理的是连续型问题。其实两者之间是可以互相转换的。

 

K-Means(聚类)

聚类概念
聚类分析是在对象数据中发现对象之间关系。一般来说,组内相似性越高,组间相似性越大,则聚类的效果越好。

k-means概念
k-means是一种无监督学习,它会将相似的对象归到同一类中。

k-means聚类的优缺点
优点:容易实现。

缺点:可能会收敛到局部最小值, 当应用到大规模数据集时会收敛较慢。

适用于:数值型数据。

k-means聚类的算法思想
1.随机计算k个类中心作为起始点。
2. 将数据点分配到理其最近的类中心。
3.移动类中心。
4.重复2,3直至类中心不再改变或者达到限定迭代次数。
 

数据预处理:

数据预处理的过程中经常需要对数据进行数值化等处理,比如将性别男女转换为计算机可以理解的1和0,还有将数值化的1,2,3,4,5按照阈值3转换为0,0,0,1,1等,下面介绍一下sklearn提供的类。

Binarizer

这个就是根据阈值将数值型转变为二进制型,阈值可以进行设定,另外只能对数值型数据进行处理,且传入的参数必须为2D数组,也就是不能是Series这种类型,shape为(m,n)而不是(n,)类型的数组,下面看下例子

df = DataFrame(np.arange(12).reshape(4,3),columns=['A','B','C'])
df
第一列为索引值
A   B   C
0   0   1   2
1   3   4   5
2   6   7   8
3   9   10  11
将小于等于5的数值转为0,大于5的转为1

binarize = Binarizer(threshold=5)
binarize.fit_transform(df)
array([[0, 0, 0],
       [0, 0, 0],
       [1, 1, 1],
       [1, 1, 1]])
也可以传入df[['A','B']]来对两列进行转换,注意,不可以是df['A']或者df.A,因为df.A是Series不是二维的

 关于聚类评价指标描述

兰德系数的值在[0,1]之间,当聚类结果完美匹配时,兰德系数为1。

轮廓系数评价法的最佳位置是畸变程度最大

单变量方法不能检测不是极端值的异常值

 

在目前的机器学习工作中,最常见的三种任务就是:

  1. 回归分析
  2. 分类分析
  3. 聚类分析

有监督学习分为 回归和分类。

有监督的算法:KNN,决策树,贝叶斯

无监督的算法:Kmeans

1. 线性回归
假设 特征 和 结果 都满足线性。即不大于一次方。这个是针对 收集的数据而言。
收集的数据中,每一个分量,就可以看做一个特征数据。每个特征至少对应一个未知的参数。

2. 逻辑回归
逻辑回归与线性回归的联系、异同?

逻辑回归的模型 是一个非线性模型,sigmoid函数,又称逻辑回归函数。但是它本质上又是一个线性回归模型,因为除去sigmoid映射函数关系,其他的步骤,算法都是线性回归的。可以说,逻辑回归,都是以线性回归为理论支持的。

逻辑回归函数

表现了0,1分类的形式。

应用举例:

是否垃圾邮件分类?

是否肿瘤、癌症诊断?

是否金融欺诈?

 

正则化:为防止过拟合的出现

在处理实验数据的时候,我们常常会遇到个别数据值偏离预期或大量统计数据值结果的情况,如果我们把这些数据值和正常数据值放在一起进行统计,可能会影响实验结果的正确性,如果把这些数据值简单地剔除,又可能忽略了重要的实验信息。这里重要的问题是如何判断异常值,然后将其剔除。判断和剔除异常值是数据处理中的一项重要任务,目前的一些方法还不是十分完善,有待进一步研究和探索。
 
异常值outlier:指样本中的个别值,其数值明显偏离它(或他们)所属样本的其余观测值,也称异常数据,离群值。
 
目前人们对异常值的判别与剔除主要采用物理判别法和统计判别法两种方法

 
所谓物理判别法就是根据人们对客观事物已有的认识,判别由于外界干扰、人为误差等原因造成实测数据值偏离正常结果,在实验过程中随时判断,随时剔除。
 
统计判别法是给定一个置信概率,并确定一个置信限,凡超过此限的误差,就认为它不属于随机误差范围,将其视为异常值剔除。当物理识别不易判断时,一般采用统计识别法。
 
对于多次重复测定的数据值,异常值常用的统计识别与剔除法有:
 
拉依达准则法(3δ):简单,无需查表。测量次数较多或要求不高时用。是最常用的异常值判定与剔除准则。但当测量次数《=10次时,该准则失效。

 

LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”。什么意思呢? 我们要将数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。

评估非监督式学习的指标也有很多,例如使用调整兰德指数(Adjusted Rand Score)来评估聚类模型。

 

 

 

以下是Python代码实现: ```python import random # 生成随机数据样本 dataset = [] for i in range(20): data = [random.randint(1, 100) for j in range(5)] dataset.append(data) print("原始数据样本:") for data in dataset: print(data) # 最大-最小规范化 for i in range(5): max_val = max([data[i] for data in dataset]) min_val = min([data[i] for data in dataset]) for j in range(20): dataset[j][i] = (dataset[j][i] - min_val) / (max_val - min_val) print("最大-最小规范化结果:") for data in dataset: print(data) # 零均值规范化 for i in range(5): avg_val = sum([data[i] for data in dataset]) / 20 for j in range(20): dataset[j][i] = (dataset[j][i] - avg_val) print("零均值规范化结果:") for data in dataset: print(data) ``` 输出结果如下: ``` 原始数据样本: [25, 2, 42, 38, 35] [17, 86, 54, 65, 68] [38, 7, 84, 43, 69] [39, 49, 54, 55, 41] [54, 6, 54, 56, 34] [71, 56, 38, 64, 17] [13, 44, 38, 31, 67] [69, 16, 55, 100, 4] [74, 90, 39, 43, 39] [39, 52, 8, 25, 79] [24, 20, 79, 50, 60] [12, 88, 45, 31, 77] [3, 68, 24, 70, 36] [72, 57, 80, 73, 6] [29, 43, 67, 90, 64] [87, 81, 60, 37, 66] [39, 21, 60, 17, 99] [67, 3, 49, 9, 78] [40, 91, 87, 6, 48] [29, 86, 95, 83, 89] 最大-最小规范化结果: [0.22826086956521738, 0.0, 0.38636363636363635, 0.32432432432432434, 0.30864197530864196] [0.11956521739130435, 0.9787234042553191, 0.5454545454545454, 0.6216216216216216, 0.7160493827160493] [0.3804347826086957, 0.0425531914893617, 0.8409090909090909, 0.40540540540540543, 0.7283950617283951] [0.391304347826087, 0.46808510638297873, 0.5454545454545454, 0.5675675675675675, 0.38271604938271603] [0.5760869565217391, 0.031914893617021274, 0.5454545454545454, 0.581081081081081, 0.24691358024691357] [0.8043478260869565, 0.5531914893617021, 0.3522727272727273, 0.5945945945945945, 0.0] [0.07608695652173914, 0.3617021276595745, 0.3522727272727273, 0.22972972972972974, 0.7037037037037037] [0.782608695652174, 0.10638297872340426, 0.5568181818181818, 1.0, 0.0] [0.8369565217391305, 1.0, 0.36363636363636365, 0.40540540540540543, 0.345679012345679] [0.391304347826087, 0.5106382978723404, 0.0, 0.16216216216216217, 0.8641975308641974] [0.21739130434782608, 0.19148936170212766, 0.8181818181818182, 0.5675675675675675, 0.6296296296296295] [0.06521739130434782, 0.9574468085106384, 0.4772727272727273, 0.22972972972972974, 0.8395061728395061] [0.0, 0.7021276595744681, 0.22727272727272727, 0.7297297297297296, 0.2716049382716049] [0.8152173913043478, 0.5638297872340425, 0.8863636363636364, 0.7567567567567567, 0.031746031746031744] [0.29347826086956524, 0.425531914893617, 0.7045454545454546, 0.918918918918919, 0.7037037037037037] [1.0, 0.8936170212765957, 0.5909090909090909, 0.2972972972972973, 0.691358024691358] [0.391304347826087, 0.20212765957446807, 0.5909090909090909, 0.0, 1.0] [0.7608695652173914, 0.010638297872340425, 0.45454545454545453, 0.05405405405405405, 0.8518518518518517] [0.29347826086956524, 0.9787234042553191, 1.0, 0.8648648648648649, 0.9259259259259258] 零均值规范化结果: [-0.19999999999999996, -0.95, 1.05, 0.55, 0.40000000000000013] [-0.5, 0.6999999999999998, 0.10000000000000009, 1.0500000000000003, 0.75] [0.25, -0.9000000000000001, 1.3000000000000003, 0.20000000000000018, 0.8000000000000002] [0.30000000000000004, 0.1, 0.10000000000000009, 0.30000000000000004, 0.10000000000000009] [0.9499999999999998, -0.9500000000000001, 0.10000000000000009, 0.35000000000000003, -0.15000000000000002] [1.7000000000000002, 0.30000000000000004, -0.19999999999999996, 1.0000000000000002, -0.9500000000000001] [-0.65, -0.05000000000000002, -0.19999999999999996, -0.5500000000000002, 0.75] [1.5, -0.7000000000000001, 0.15000000000000002, 2.1500000000000004, -0.9500000000000001] [1.75, 1.1999999999999997, -0.15000000000000002, 0.20000000000000018, -0.10000000000000009] [0.30000000000000004, 0.050000000000000044, -1.1500000000000001, -0.9500000000000001, 1.2000000000000002] [-0.3999999999999999, -0.45, 0.7000000000000002, 0.30000000000000004, 0.45000000000000007] [-0.85, 0.8, -0.04999999999999993, -0.5500000000000002, 1.1500000000000001] [-1.3, 0.30000000000000004, -1.0500000000000003, 0.7500000000000002, -0.20000000000000018] [1.8000000000000003, 0.34999999999999987, 1.2500000000000002, 0.8000000000000003, -1.1500000000000001] [-0.19999999999999996, -0.15000000000000002, 0.44999999999999996, 1.4500000000000002, 0.7000000000000002] [2.25, 1.15, 0.050000000000000044, -0.6999999999999998, 0.6500000000000001] [0.30000000000000004, -0.9000000000000001, 0.050000000000000044, -1.1500000000000001, 1.5500000000000003] [1.5, -0.85, -0.04999999999999993, -1.3500000000000003, 1.2000000000000002] [0.44999999999999996, 1.2499999999999998, 1.1500000000000001, -1.1000000000000003, -0.050000000000000044] ``` 其中第一组结果为最大-最小规范化结果,第二组结果为零均值规范化结果。可以看到,经过规范化后,数据样本的值都在0到1之间或接近0,方便进行后续的数据分析和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值