第一章 走进数据科学:博大精深,美不胜收
1.“大数据”的概念与特点:3V(Volume,velocity,variety)
- volume:数据量 TB—>ZB
- velocity:数据源源不断而来,形成数据流
- variety:数据类型更多
2.数据挖掘的特点:
我们从massive的数据中,找出useful,hidden,interesting的数据
3.分类问题
- 对于很多分类问题而言,我们可以把问题抽象为在样本域画出边界函数(直or曲,一条or多条)(也有一些非线性问题可能没法在单一的超平面内分隔类别)
- 混淆矩阵(Confusion Matrix)
水平方向表示模型的预测,竖直方向表示真实的标签,同时,从左到右,从上到下,第一位表示正例,第二位表示反例(关于水平和竖直方向的问题和我平时看到的混淆矩阵还不一样,不过应该只用清楚标明就好)即
真实正例 | 真实反例 | Total | |
预测正例 | TP | FP | P’ |
预测反例 | FN | TN | N’ |
Total | P | N |
其中:
- TP(True Positive):真正例,正确被预测为正例的样本
- FP(False Positive):假正例,错误地被预测为正例的样本
- TN(True Negative):真反例,正确地预测为反例的样本
- FN(False Negative):假反例,错误地被预测为反例的样本
而我们常用的性能指标:
我觉得我们需要思考的是,FP和FN尽管都是错误预测,但是他们带来的影响是否相同?他们的权重是否相同?
- ROC曲线(Receiver Operating Characteristic)
这是评估二元分类器的性能的重要工具,横轴表示假正例率(实际负例中,被错误预测为正例的比率)即
纵轴表示真正例率(实际正例中,被正确预测为正例的比率)即
它的工作原理是:针对一个模型,探究不同阈值下,模型的指标,其流程是:
- 先给分类器设定一个较高的阈值,这样大部分样本都会被判定为反例,故TPR和FPR也许会较低
- 之后缓慢降低阈值使TPR增大,但也许FPR也会增大
- 针对不同的阈值,绘制出不同的点,并连接得到ROC曲线
至于如何评判性能呢?我们当然希望对于正例,其预测概率值尽可能大,而对于假正例率尽可能低,即TPR尽可能高,FPR尽可能低,图形尽可能集中在左上角,而对于这个“左上角”,量化的标准为AUC(Area under the curve),即曲线下方的面积
- AUC=1 完美,越接近1越好
- AUC=0.5 即图中这条虚线,这代表这就是一种Random Guess,即越接近0.5越差
4.聚类及其他数据挖掘问题
1.聚类
聚类与分类的一个不同点在于聚类是无监督学习,而分类是监督学习,深入浅出地说,区别在于有无人工标记的输出(标签),而且针对输出进行训练,模型目的一般是分类或预测。
而聚类(clustering)指的是根据数据某些属性计算距离,并把样本划分为具有相似特征的群组或簇,目的是同一簇的点尽可能相似,不同簇的点尽可能不相似。
至于距离,我们有如下常用距离:
- 欧式距离:
- 曼哈顿距离:
- 切比雪夫距离:
2.关联规则的挖掘——发掘数据的项之间的关联性
如图所示,也许你会发现同时购买了Milk和Bread的人也购买了Butter
3.线性回归
这部分的定义有点存疑,不过老师想表达的意思我理解,就是回归的不一定是直线也可以是曲线
4.有关数据预处理的部分,下一章再详细说明
第二章
1.数据清洗
首先我们为什么要进行数据预处理呢?(数据清洗是其中的一部分)
因为很多数据是脏数据,这也是在数据挖掘项目中的最大挑战,什么样的数据是脏数据呢?包括但不限于
- Incomplete
- Noisy “salary=-100”
- Inconsistent 同一个样本不同属性的冲突,如年龄和生日的不一致
- Redundant 过量数据或过多特征
- Others:
- Data Types 类型导致的问题
- Imbalanced Datasets 数据集不平衡
还有另外一个问题就是Missing Data:缺失的数据
其中一个产生的原因需要注意:Not Applicable,即不适用,比如学生的工资这一栏本就应是空的
解决Missing Data的方法:
- Ignore,但缺失的数据条数太多了就不行
- 手工补数据,麻烦
- 自动补数据,补什么数?常量还是变量?(均值?平均数?)
有关Outliers和Anomaly的定义和区别
- Outliers:离群点,可能会影响回归等结果
- Anomaly:异常点,离群但不一定异常(姚明)
2.异常值和重复数据检测
- Local Outlier Factor
这部分是关于离群点的判定,让我来梳理一下:
:即依k临近,找到离B第k近的点离B的距离
:即A在B的k-邻域,则A,B的k-距离被定义为,这是为了保证可达性;而当A在B的k-邻域外时,则选择A,B的实际距离
,其中即A的k-邻域,上式反映了A的k-邻域内所以点到A的距离的平均值的倒数,但这并非一个相对数值,不能比较
,这就是一个相对的数值了,比较A的k-邻近点与A相比谁更离群 - 重复数据检测
如果数据量较大,比如100,000条,当我们在整体上两两对比,这个比较量太大了,所以我们可能采用滑动窗口的方式,如在大小为100的Slide Window中比较,那么我们怎么使得可能是相同的数据较邻近呢?我们可以设计一个算法,依数据的各项特征计算一个key,然后依key排序。
比如在外国的视野中,当lastname(姓)相同时,firstname相近,地址一样,就认为两个人是同一个人(外国人姓比较多,相同说明是同一个人的概率比较大) - 类型转换和采样
- Attribute Types:
- Continuous类(即连续型):气温,身高等实数
- Discrete类(即离散类):一般是整数
- Ordinal类(即序数类):用以排序,如{easy,medium.hard}等
- Nominal类(即名义类):用以命名,标记数据,如{blue,green,}
- String类(即字符串类):比如一些文本,往往是unstructed data
- Type Conversion:
在类型转换的过程中,比如我们在对Nominal Data编码时,你怎么设定编码的标准呢?{Blue,Red,Green}如果设定为0,1,2此类,相当于你默认了某两类的距离比另外的两类更大,这可能是没有理由的
我们也可以设置1000,0100,0010,0001这样的独热编码,但是当种类太多时,这种编码方式就不太合适了 - Sampling
降低时间复杂度/降低成本
Aggregation:把多个数据整合成一个整体,比如更改规模:日营业额——>月/年营业额,同时采样可以处理数据集的不平衡问题 - Imbalanced Datasets
不平衡的数据集是怎么影响分类器的性能的呢?
- 大部分算法会注重提升整体的准确率,而这通常是通过正确分类多数类来实现的
- 不平衡数据集中,总体的准确率往往不能反映模型的实际效果
- 对少数类不那么关系,可能导致模型在未见过的数据上的泛化能力下降,尤其是少数类
所以我们怎么在不平衡数据上设定合理的评价指标呢?
其中,,它表示正类上的准确率,,它表示负类上的准确率
,这是调和平均数的形式,而前面的开平方用的是几何平均数
F1score还是有不同模式的
- “micro”:把所有样本放在一起,当成一个整体去算,每一个样本的权重都相同,但可能收样本不平衡影响
- “macro”:各类的指标分开计算,然后取平均,每一类权重都一样,受样本不平衡影响较小
- ‘’weighted”:在macro的基础上,根据样本数量设置了权重
- Over-sampling(过采样)
这是解决办法,它增加少数类的样本,也不是单纯复制,可能在某两个点之间随机增加一些点,但可能导致少数样本上过拟合 - Boundary Sampling
意思就是对于大量数据点,可能中间的点不怎么用得上,采样边界上的点,有利于提升速度,减少数据量
- 数据描述和可视化
- 归一化(Normalization)
- 映射到0-1
- 标准化/正态化
,是均值,是标准差(standard deviation)
- Data Description
- Mean(平均数)
- Median(中位数)
- Mode(类似于众数,频率高)
- Variance(方差)
- Pearson相关系数(这个就是高中数学里面的那个相关系数,它衡量的是线性相关强度)
其中,r>0 正相关,r=0无线性相关,r<0负相关 - 衡量相关程度
- 数据可视化
- Box Plots(箱线图):高维度上,观察每一维的分布,但丧失了维度之间的关系
- Parallel Coordinates:平行坐标图
每一条折线反映一个样本,平行坐标图是一种用于可视化高维数据的方法。通过这种图表,可以观察样本在不同特征上的表现,并可以用于探索数据中的潜在模式和关系,尤其是在不同类别之间的区分。 - Cite place:引用的热点图
- 特征选择
- 比如我们正在做一个判断一个人的性别时,什么样的特征能够帮助我们更好地判断?
首先要说明一个概念:Entropy(熵):
其中,H(X)
是随机变量X
的熵,P(x_i)
是随机变量中第i
个事件的概率,而b
是底数。
- 当底数
b
为 2 时,熵的单位是比特(bits)。这是信息论中最常用的单位。 - 当底数为自然对数的底数
e
时,熵的单位是奈特(nats)。 - 当底数为 10 时,熵的单位是哈特利(Hartleys)或班(bans)。
如果男女比例各是50%,则,而1.0是该值的最大值,意味着最不确定
那么现在我们增加一个属性:其中smoker40%:95%男,5%女,non-smoker60%:80%女,20%男
则
故信息增益
- Branch and Bound(分支定界)
这是一个组合优化问题,比如我们可以在五个特征中,找到最好效果的二元组
如图,核心点如上,我们认为某特征集合是另一集合的自己,则其子集性能不如也不如该集合,树的作用是去掉某些特征使得叶节点都是特征的二元组,如果我们发现(2,3)比(1,3,4,5)更好,则后面整个该分支都不需要考虑了,这也是一种剪枝 - Feature Subset Search
实际上,上面也是一种FSS
其他方式还有
- Top K Individual Features:找到最好的k个组合在一起,但这样不一定好,可能各个特征有重合的部分
- Sequential Forward Selection:依现有的特征组合和其他特征一一组合,再判断不断扩充组合
- Sequential Backward Selection:慢慢减少组合
要注意以上方法都不一定是全局最优,因为采用的都是贪心思路
3.主成分分析(Principal Component Analysis)
老师在课上给出了许多的数学推导,简而言之PCA就是一种线性降维技术,主要目的就是减少数据的维数,同时保留数据中的主要变化或结构。至于他的线性,体现在它使用了一种线性运算。
PCA可以将具有相关性的多个特征转化为几个相互独立的主成分
以下是它的几个主要步骤
1. 标准化数据:PCA对变量的尺度敏感,所以要先对每个特征标准化(直接上就像二维平面上(两个特征),这个散点构成的椭圆不能太扁一样)
2. 计算协方差矩阵:计算数据的协方差矩阵,或者计算矩阵的奇异值分解
3. 求解协方差矩阵的特征值和特征向量:这些特征向量是主成分的方向,而和这些特征向量相关的特征值代表了数据在相应特征上的方差
4. 对特征值排序并选择主成分:按特征值大小排列,并选择前k个最大的
5. 将原始数据转换到新的空间
4.线性判别分析(Linear Discriminant Analysis)
在详细说明LDA之前,先让我谈谈在2D平面上的直觉问题,如果将呈椭圆的分布往某一轴上投影,该椭圆的长轴和短轴往往不是和坐标轴平行的,所以投影时为了得到最大的Variance(据老师讲,这也是Information,方差较大才更有意义,包含更多的信息),可能我们的投影方向需要旋转,或者说是坐标轴旋转
这里就显示了两个新的主成分,他们互相垂直,且保证了信息量。
在了解到这一直觉之后,我想聊聊LDA和PCA首先在直觉上的区别,PCA实际上是一类无监督学习,它没有标签的概念,所以如果有很多类,并且在分类问题下,他只会视这几类数据为一个整体,使得分类问题变得困难。
如图,如果沿红色箭头投影,会使得两类数据更加难以区分。
除此以外,LDA直觉上也是以投影的方式来进行降维。这种方法也存在一些劣势与限制,如下
- 劣势
- 线性假设:LDA假设数据是线性可分的,这意味着它可能无法有效处理具有复杂非线性结构的数据。
- 对类别分布的假设:LDA通常假设各个类别的数据遵循高斯分布,且具有相同的协方差矩阵。如果这些假设不成立,LDA的性能可能会降低。
- 敏感性:LDA对异常值和噪声比较敏感。异常值可能对计算类内和类间散度矩阵产生显著影响,导致分类性能下降。
- 样本量要求:LDA要求每个类别中的样本数量至少要大于特征数,以便计算散度矩阵和它们的逆。在特征维度较高时,这可能是一个限制。
- 限制条件
- 类别数量限制:在使用LDA进行降维时,最多可以降到"类别数-1"的维度。这意味着如果类别数量有限,降维的空间也有限。
- 数据预处理:在应用LDA之前,通常需要进行数据标准化或正态化处理,特别是当不同特征的量级相差很大时。
- 数据集平衡:LDA对类别不平衡敏感。如果一个类的样本远多于另一个类,LDA可能会偏向于样本量较大的类。
第三章 贝叶斯,决策树等分类器
1. 贝叶斯奇幻之旅
分类问题比较熟悉,我们就不过多介绍了
下面我想针对贝叶斯公式写一些简单的推导
,从逻辑上理解这个公式可能会更加更容易
而由(2)式则可以得到我们大名鼎鼎的贝叶斯公式
其中,我们可以这样认为是先验概率(prior),这是在观察到新事件,之前基于我们之前的经验和知识得到的
也可以通过专家知识,或者统计/历史数据分析得到,比如计算在用某种药的情况下,病人康复的频率来估计概率
就是我们观察到的新事件的概率了
就是我们的后验概率了
在实际应用中,贝叶斯方法允许我们结合先前的知识和实验数据来更新对药物有效性的评估。例如,即使先前对药物的信心不强(较低的先验概率),强有力的临床试验结果(高的似然性P(B∣A))可以显著提高我们对药物有效性的信心(较高的后验概率 P(A∣B))。这种方法在药物开发和医学研究中非常有用,因为它提供了一种结合新信息和现有知识的形式化方式
这也是我觉得很牛的地方,他可以通过先验知识和实验的方式,来计算一些新事件的概率,并进行评估,同时来更新我们的概率分布。
朴素贝叶斯的“朴素”
所以我们如何用贝叶斯公式来做分类呢,实际上和很多分类器不同,它并不是直接给出类别,而是给出可能是某类的概率,如下:
即我们在等条件都发生的情况下,估计数据为的概率,我们接下来就用贝叶斯公式来计算这个式子
对于不同的类别,上式的分母都是一样的,所以我们只需要比较分子
这个式子的值是不好计算的,因为这个条件概率是一个联合条件概率,在特征较多的情况下,计算该值是不现实的,所以我们做了一个”条件独立“(Conditionally Independent)的假设,把上式转化为了
这样就可以拆成一个个的特征的条件概率进行计算了
而,朴素贝叶斯分类器中的“朴素”就体现在它对特征间条件独立性的假设上。具体来说,这种分类器在计算后验概率时假设每个特征相对于其他特征是独立的。这个假设简化了计算过程,但也是一个很强的假设,因为在许多实际情况下,特征之间可能是相互依赖的。
这两个公式都反映的是,给定事件G的情况下,A和B是条件独立的,重点理解公式2
所以老师重点举了几个例子来帮助理解条件独立的概念,比如他举了一个肺癌的例子,有两种特征:分别是性别和抽烟,也许根据统计你会得出,肺癌和性别有关,但实际上你只是跳过了抽烟这个属性,因为实际上是抽烟和肺癌相关而非性别和肺癌相关,
即,即cancer与sex是独立的。
除此以外,简单回归一下独立和相关的区别,相关是与协方差联系的,他主要反映的是变量间的变化之间的关系,并不涉及因果关系,而独立性往往是更强的条件,强调不存在任何关系。
Laplace Smoothing (拉普拉斯平滑),这一点主要提出来为了避免某一概率为0的情况,在贝叶斯公式下,如果有一个概率为0,就导致连乘积为0,而这显然是不可接受的。举例来说,如果在我们的统计中,所有女性长头发的情况并未出现过,那么我们可能认为,性别为女时,该人为长头发的概率是0,这样就使得条件概率为0,进一步地,先验概率也为0,导致我们无法正确计算,长头发特征下,性别为女的概率,所以我们采用了Laplace平滑,无论是否出现过,所有统计次数都加上1,进而贝叶斯公式可能表示为
朴素贝叶斯在Text Representation中的作用
简而言之就是,我们把句子分词之后,不去考虑单词出现在句子的哪个位置,而是去考虑单词出现的频率,以此来衡量这个句子的主题。
词袋模型(Bag of Words, BoW)是自然语言处理和信息检索领域中的一种文本表示方法。在词袋模型中,一段文本(如一句话或一个文档)被表示为词语的多重集合,不考虑语法甚至词语的顺序,但保留词语的频率信息。
- 工作原理
- 创建词汇表:首先从所有文档中提取不同的词,创建一个词汇表。
- 文档向量化:然后,每个文档都被转换为一个向量。向量的长度是词汇表的大小,每一维表示词汇表中的一个词。
- 计算词频:在文档的向量中,每一维的值对应于该词在文档中出现的次数。这通常被称为词频(Term Frequency, TF)。
- 优点
- 简单高效:词袋模型的实现简单,转换过程高效,便于处理大规模文档集合。
- 易于理解:模型的结果易于理解,不需要复杂的语言学知识。
- 缺点
- 忽略词序:词袋模型忽略了单词之间的顺序和句子结构,这在某些文本分析任务中可能会丢失重要信息。
- 忽略上下文:由于不考虑上下文,同义词和多义词可能会影响模型的性能。
- 高维稀疏性:词汇表通常很大,导致文档向量维度高且稀疏。
然后用贝叶斯公式,就可以计算在对某句子感不感兴趣的条件下,某个单词的概率,从而最后得到一系列单词组成的句子是否会得到用户的兴趣
2.决策树
决策树作为一种分类算法,与贝叶斯不同的是,决策树并不提供一个“概率”,而是直接提供类别。
并且决策树有一个巨大的优势,就是它可以提取规则,我们可以根据决策树的结构来得到我们如何把一个对象归为某一类的逻辑。
同时,对于某一个数据集,它对应的决策树并不唯一,我们可能需要选择更好的树来做分类以防止过拟合。
决策树的基本流程
决策树学习的算法通常是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得各个子数据集有一个最好的分类的过程。这一过程对应着对特征空间的划分,也对应着决策树的构建。
- 构建根节点,将所有训练数据都放在根节点,选择一个最优特征,按着这一特征将训练数据集分割成子集,使得各个子集有一个在当前条件下最好的分类。
- 如果这些子集已经能够被基本正确分类,那么构建叶节点,并将这些子集分到所对应的叶节点去。
- 如果还有子集不能够被正确的分类,那么就对这些子集选择新的最优特征,继续对其进行分割,构建相应的节点,如果递归进行,直至所有训练数据子集被基本正确的分类,或者没有合适的特征为止。
- 每个子集都被分到叶节点上,即都有了明确的类,这样就生成了一颗决策树。
决策树选择的几个关键概念
信息增益(Information Gain)
信息增益基于熵的概念,熵是衡量数据集不确定性的度量。信息增益是指在知道某特征(或属性)的信息之后使得数据集不确定性减少的程度。信息增益越大,意味着使用该特征来分割数据集提供了更多的信息。
熵 (Entropy)
熵是衡量数据集纯度的一种方式。它的公式为:
其中 是数据集, 是第
信息增益 (Information Gain)
信息增益是选择分裂属性时的一个标准。计算公式为:
其中 是属性, 是数据集,是属性 的所有可能值, 是属性 的值为
剪枝 (Pruning)
剪枝是决策树算法中防止过拟合的重要手段。在树构建过程中,可能会产生一些对最终分类准确性贡献不大甚至是有害的分支。剪枝可以通过删除这些分支来简化决策树。剪枝分为预剪枝和后剪枝,预剪枝是在决策树生成过程中就进行剪枝,后剪枝是在决策树生成后基于验证集来进行。
预剪枝的一个简单方法是设置一个阈值,当信息增益小于这个阈值时,停止分割,并将当前节点设置为叶节点。
信息增益率 (Gain Ratio)
信息增益率是另一种选择分裂属性的标准,尤其用于避免偏向于多值属性的问题。计算公式为:
其中 是分割信息,计算公式为:
第四章 神经网络
这一章的内容我比较熟悉,下面还是对我稍微陌生的感知机来说明一下。
其实我只是对感知机名字不太熟悉,他就是一种普通的,可以用于分类任务的前馈神经网络。
感知机 (Perceptron)
感知机是一种简单的线性二分类算法,由Rosenblatt在1957年提出。它的目标是找到一个能够将两类数据完全正确分开的分割超平面。
基本原理
感知机模型是一个线性方程,可表示为:
其中 (x) 是输入特征,(w) 是权重,(b) 是偏置项,(\text{sign}) 是符号函数。
学习算法
感知机使用迭代的方式进行训练。在每次迭代中,它调整权重以最小化分类错误。权重更新规则为:
其中 (\eta) 是学习率,(y_i) 是真实标签,(\hat{y}_i) 是预测标签。
优缺点
- 优点:简单易于理解,适合线性可分问题。
- 缺点:无法处理非线性问题,只适用于二分类任务。
多层感知机 (Multi-Layer Perceptron, MLP)
多层感知机是感知机的扩展,它由多个层组成,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过加权连接进行信息传递。
结构
- 输入层:接收输入数据。
- 隐藏层:一个或多个隐藏层,其中每个神经元对输入数据进行非线性转换。
- 输出层:输出最终的预测结果。
前向传播
在前向传播过程中,数据从输入层传递到输出层。每个神经元的输出是其加权输入的非线性函数,通常是一个激活函数,如ReLU或Sigmoid。
反向传播
反向传播是一种有效的学习算法,用于计算误差关于网络参数的梯度。通过梯度下降法,可以调整网络中的权重和偏置,以最小化预测误差。
应用
多层感知机广泛应用于分类、回归、图像识别、语音识别等多种机器学习任务中。
优缺点
- 优点:能够处理非线性问题,适用于多分类任务。
- 缺点:相比单层感知机更复杂,需要更多的训练数据,容易过拟合。
第五章 SVM(支持向量机)
支持向量机(SVM)详解
1. SVM的基本概念
- 目标:SVM旨在寻找一个超平面,以最大化两个类别之间的间隔。
- 超平面:在维空间中,超平面是一个维的子空间,它能最好地分割不同的类别。
2. 支持向量
- 定义:支持向量是距离决策边界最近的那些数据点。它们对于定义决策边界至关重要。
3. 间隔与边界
- 间隔:定义为到最近数据点的距离,目的是最大化这个间隔。
- 硬间隔:在数据线性可分的情况下,间隔可以完全分开两个类。
- 软间隔:在数据线性不完全可分时,允许某些数据点处于间隔区域内。
4. 核技巧
- 核函数:用于在高维空间中映射数据,以便在这个高维空间中找到一个线性分割平面。
- 常见核函数:线性核、多项式核、径向基函数(RBF)核、sigmoid核。
5. SVM的数学原理
- 优化问题:SVM的目标是最小化函数 ,同时满足约束条件,其中是每个数据点的类标签。
- 拉格朗日乘子法:用于解决这个约束优化问题。
6. SVM的应用
- 二分类问题:最常见的用途。
- 多分类问题:通过一对一或一对多策略来实现。
- 其他应用:如回归(SVR)、异常值检测等。
7. SVM的优缺点
- 优点:
- 在高维空间表现良好。
- 在决策函数中只用到了支持向量,计算效率高。
- 通过适当的核函数,可以解决非线性问题。
- 缺点:
- 对大规模数据集的训练效率不高。
- 对于噪声和离群点敏感。
- 需要合适的核函数和正则化参数。
SVM原理
1.线性可分
在线性可分的情况下,我们的目标是找到一个能够清楚划分不同类别(如黑点和红点)的超平面。我们首先定义原始数据集为 ,其中 是不同维度的特征, 的取值为 1 或 -1(代表两个分类)。我们的目标超平面可以表示为 ,其中 是超平面的法向量,决定了超平面的方向,
(1) 无松弛变量
在不考虑松弛变量的情况下,我们通过最大化间隔来确定最优的 和 。这可以通过最小化 来实现,同时满足约束条件 。我们使用拉格朗日乘子法将约束条件融合到优化目标中,最终求解得到的 和
(2) 带松弛变量和惩罚因子 C
在引入松弛变量 和惩罚因子 C 的情况下,目标函数变为最小化 ,同时满足约束条件 和 。这样允许一些样本点违反原始的间隔要求。
2.线性不可分
在线性不可分的情况下,我们通过核技巧将样本映射到高维空间,以使样本在新空间中线性可分。核函数有多种类型,包括线性核、高斯径向基 (RBF) 核、多项式核和 Sigmoid 核等。选择核函数时,可以基于数据的特性或通过交叉验证来确定。
核函数的选择
- 如果特征数量多,接近样本数量,通常使用线性核。
- 如果特征数量少,样本数量适中,倾向于使用高斯核。
- 如果特征数量少,而样本数量很大,可能需要手动增加特征以使用线性核。
通过这种方式,SVM可以被视为一种多层神经网络,它在不同的情况下通过调整核函数来处理线性可分和线性不可分的问题。
第六章 聚类算法与K-means
一、什么是聚类分析
聚类分析是一种无监督学习算法,主要用于根据样本之间的相似性将它们自动归为同一个类别。与监督学习的分类算法不同,聚类算法不依赖于预先定义的标签。常见的相似度度量方法包括欧氏距离。
二、算法流程
- 选择聚类的个数 。
- 随机产生 个聚类中心或直接生成
- 为每个点确定其聚类中心。
- 计算新的聚类中心。
- 重复以上步骤直到满足收敛要求,通常是中心点不再发生变化。
三、优缺点
优点
- 简单易实现:KMeans算法的实现相对简单直观。
- 高效:在大数据集上也能保持较好的性能,计算复杂度接近线性。
- 适用于大型数据集:KMeans在大规模数据集上的表现较好。
- 可解释性强:聚类结果容易理解,便于解释。
- 调整灵活:可以适应不同类型的属性,通过调整距离度量(如欧氏距离或曼哈顿距离)来满足不同需求。
缺点
- 需要预先指定K值:KMeans要求事先指定簇的数量,这在实际应用中可能是个问题,特别是当数据的聚类结构不清楚时。
- 对初始中心点敏感:不同的初始中心点选择可能导致完全不同的结果。
- 对噪声和离群点敏感:异常值和噪声可能对最终结果产生较大影响。
- 不适合发现非凸形状的簇:KMeans倾向于发现凸形状的簇,对于其他形状的簇效果不佳。
- 局部最优问题:KMeans可能只找到局部最优解,而非全局最优解。
- 对高维数据效果降低:在处理高维数据时性能下降,可能需要降维处理。
四、K值确定
4.1 肘部法则
肘部法则基于误差平方和(SSE)来确定最佳的 值。随着 值的增大,每个簇内样本到其簇中心的距离之和会减小。当 达到一个特定值后,SSE的下降速率会显著减缓,形成一个肘点,这个点被认为是最佳的
4.2 肘部法则代码实现
# K值的确定
import numpy as np
from sklearn.cluster import KMeans
from scipy.spatial.distance import cdist
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文注释
plt.rcParams['axes.unicode_minus'] = False # 显示正负号
cluster1 = np.random.uniform(0.5, 1.5, (2, 5))
cluster2 = np.random.uniform(3.5, 4.5, (2, 5))
X = np.hstack((cluster1, cluster2)).T
K = range(1, 6)
meandistortions = []
for k in K:
kmeans = KMeans(n_clusters=k)
kmeans.fit(X)
meandistortions.append(sum(np.min(cdist(X, kmeans.cluster_centers_, 'euclidean'), axis=1)) / X.shape[0])
plt.plot(K, meandistortions, 'bx-')
plt.xlabel('k')
plt.ylabel('Average Distortion')
plt.title('Elbow Method for Optimal K')
plt.show()
五、算法效果衡量标准
5.1 轮廓系数 (Silhouette Coefficient)
轮廓系数是一种衡量聚类效果的指标,它结合了凝聚度(Cohesion)和分离度(Separation)。轮廓系数的值介于 -1 到 1 之间,值越大表示聚类效果越好。一个高的轮廓系数表示簇内样本相互接近,而簇间样本相互远离。
5.2 最近簇
最近簇是通过计算所有样本点的平均轮廓系数来确定的。平均轮廓系数的值范围也是 -1 到 1 之间。在一个好的聚类中,簇内样本距离应该尽可能近,簇间样本距离应该尽可能远,这样会导致平均轮廓系数较大,意味着聚类效果较好。
第七章 关联规则分析
关联规则分析
关联规则分析是一种无监督学习方法,用于在大型数据集中发现变量之间的有趣关系。这种方法常用于市场篮分析、推荐系统、生物信息学等领域。
定义和概念
- 项集(Itemset):由多个项(Item)组成的集合。
- 数据库(Database):由多个事务(Transaction)组成,每个事务包含一组项。
- 事务(Transaction):是项的集合,具有唯一标识。
- 关联规则:形如 的规则,其中 和 是不同的项集, 是前提,
例如,在超市销售记录中,
关键指标
- 支持度(Support):项集在数据库中出现的频率。对于项集 ,其支持度定义为包含
- 置信度(Confidence):规则 的可信程度。定义为同时包含 和 的事务数与只包含
- 提升度(Lift):衡量 和 的独立性。当提升度大于 1 时,表示 和
- 确信度(Conviction):预测 导致
阈值和频繁项集
为了寻找有趣的规则,关联规则必须满足最小支持度和置信度阈值。这个过程可以分为两步:
- 根据最小支持度阈值从数据库中找出所有频繁项集。
- 根据最小置信度阈值从频繁项集中生成规则。
Apriori算法
Apriori算法是发现频繁项集的有效方法,它基于以下原则:
- 如果一个项集是频繁的,那么它的所有子集也是频繁的。
- 如果一个项集是非频繁的,那么它的所有超集也是非频繁的。
这种原理可以显著减少搜索频繁项集时的搜索空间。
Apriori算法步骤
- 生成所有单项的项集列表。
- 扫描数据库,去除不满足最小支持度的项集。
- 对剩余项集进行组合,生成包含更多元素的项集,并重复上述过程。
- 重复步骤 3,直到无法生成新的频繁项集。
这种方法虽然高效,但在处理大型数据集时可能仍需要较长时间。
第八章 推荐系统
推荐系统也是我很熟悉的部分,我想在这里讨论一下,我很喜欢的PageRank算法
一、算法介绍
PageRank (PR) 是谷歌搜索引擎用于网页排名的算法,也被广泛用于衡量图中顶点的重要性。PageRank(页面排名算法)是根据网页间的链接关系和每个网页的质量来计算每个网页的重要性。算法的核心思想是:一个页面的重要性由指向它的其他页面的重要性决定。
二、使用场景
- 网页排序:用于搜索引擎中对网页进行排名。
- 社交网络分析:识别社交网络中的关键人物或影响力节点。
- 科学研究影响力评估:评估科学家的研究影响力,不仅考虑引用次数,还考虑引用来源的重要性。
- 生物学应用:在代谢网络中评估生物反应的重要性。
- 机器学习和自然语言处理:特征选择和文本中实体的相关性排序。
三、算法实现
3.1 算法计算公式
PageRank的核心计算公式如下:
其中:
- 是节点
- 是指向节点
- 是节点
算法通过迭代计算,直到所有节点的PageRank值收敛。阻尼因子的引入是为了避免“黑洞”网页(无外链的网页)吞噬掉用户继续浏览的概率,使得算法能够在没有外链的页面上也能合理分配权重。
第九章 集成学习
集成学习方法:Bagging、Boosting、AdaBoost和RegionBoost
集成学习是机器学习中一种强大的策略,它结合多个模型来提高预测的准确性和稳健性。
Bagging(自举汇聚法)
- 原理:Bagging,全称Bootstrap Aggregating,是一种通过结合多个模型降低方差,从而提高总体性能的方法。它通过从原始数据集中进行有放回的抽样创建多个子集,每个子集用于训练一个基学习器,最终的预测是这些基学习器的聚合结果。
- 特点:
- 通过减少模型的方差来提高性能。
- 常用于决策树、随机森林等。
- 对于高方差模型(如决策树)特别有效。
Boosting(提升法)
- 原理:Boosting是一种可以将多个弱学习器组合成强学习器的方法。它按顺序训练模型,每个后续模型都侧重于前一个模型错误分类的数据点。
- 特点:
- 通过减少模型的偏差来提高性能。
- 强调错误分类的观测值。
- 每个模型都在试图修正其前一个模型的错误。
AdaBoost(自适应增强)
- 原理:AdaBoost是Boosting方法的一个具体实现,它通过增加之前被错误分类观测值的权重来训练一系列的弱学习器。
- 特点:
- 自适应地调整观测值的权重。
- 弱学习器通常是简单的模型,如小决策树。
- 适用于二分类问题。
RegionBoost(区域提升)
- 原理:RegionBoost是Boosting的一个变体,它在训练过程中侧重于数据集的特定区域,以此来提高模型的性能。
- 特点:
- 专注于数据的特定区域或子集。
- 试图通过加强模型在这些区域的表现来提高整体性能。
- 适用于处理非均匀分布的数据集。
总结
- Bagging 适合高方差模型,通过并行训练降低方差。
- Boosting 适合低偏差模型,通过顺序训练减少偏差。
- AdaBoost 是Boosting的特殊形式,强调错误分类的数据。
- RegionBoost 是Boosting的变体,侧重于数据的特定区域。
集成学习方法示例
Bagging(自举汇聚法)
示例:随机森林
- 随机森林是Bagging的一个经典例子,它创建多个决策树,每棵树使用随机抽样的数据子集进行训练。最终的预测结果是所有树的平均预测结果或多数投票结果。
Boosting(提升法)
示例:XGBoost
- XGBoost是Boosting方法的一种实现,它通过构建一系列的决策树,其中每棵树都尝试纠正前一棵树的错误。XGBoost在各种机器学习竞赛和实际应用中表现出色,特别是在处理结构化数据上。
AdaBoost(自适应增强)
示例:面部识别
- 在面部识别技术中,AdaBoost可以用来选择区分面部和非面部区域的关键特征,每一轮迭代中增加错分样本的权重,以此提升分类器的性能。
RegionBoost(区域提升)
示例:文本分类
- 在文本分类任务中,RegionBoost可以被用于强化模型在特定类型文本(如特定主题或情感)上的表现,通过聚焦在这些特定区域上的错误来提升整体分类器的准确性。
第十章 进化计算
进化计算(Evolutionary Computation)
进化计算是一种模拟生物进化过程来解决优化问题的计算方法。它包括了一系列基于自然选择和遗传学原理的算法。
1. 基本原理
进化计算基于达尔文的自然选择理论,通过模拟生物进化的机制(如遗传、突变、自然选择和重组)来进行问题求解。这些算法通常从一个随机生成的候选解集合(种群)开始,然后迭代地应用进化操作来改进这些解。
2. 主要类型
2.1 遗传算法(Genetic Algorithms, GA)
- 原理:遗传算法是最著名的进化算法之一。它使用编码的方式表示解,通过选择、交叉(重组)和变异来生成新一代的解集合。
- 应用:遗传算法广泛应用于优化问题、机器学习、调度问题等领域。
2.2 遗传规划(Genetic Programming, GP)
- 原理:遗传规划是遗传算法的一个扩展,它不仅优化参数,还优化结构。在遗传规划中,解通常表示为计算机程序或数学表达式。
- 应用:遗传规划用于自动程序设计、符号回归问题、自动控制等领域。
2.3 进化策略(Evolution Strategies, ES)
- 原理:进化策略侧重于实数优化,通过突变和选择来优化连续参数。
- 应用:进化策略常用于工程优化、机器人学和实数参数优化问题。
2.4 差分进化(Differential Evolution, DE)
- 原理:差分进化是一种简单有效的实数编码优化算法,通过组合现有种群成员的差异来生成新的候选解。
- 应用:差分进化适用于多模态、不连续和非线性优化问题。
3. 特点和优势
- 全局搜索能力:进化计算能有效地在搜索空间中进行全局搜索。
- 适应性:能够适应动态变化的问题。
- 泛化能力:适用于各种类型的优化问题。
- 并行性:种群中的个体可以并行评估,适合大规模优化问题。
4. 应用领域
进化计算在众多领域都有应用,包括但不限于:
- 优化问题
- 机器学习和数据挖掘
- 自动控制系统设计
- 艺术和音乐创作
- 生物信息学
5. 总结
进化计算通过模拟生物进化过程解决复杂的优化问题。其多样性的算法类型和广泛的应用领域使其成为解决困难问题的有力工具。