目录
一、随笔
这本书还是很友好的,书中可以认为全称不含晦涩难懂的公式,对于算法的思想解释, 却是简单易懂的。相信参照下涵盖了算法很多数学概念的书籍和此本书对照学习,对于数学概念的理解,可能也会变得有所友好吧。
学习机器学习的路途是坎坷和颠簸的,唯一不缺的就是让你半途而废的借口。
学习新知识的最大乐趣在于分享。
也许你还需要时间思考自己到底要什么,也许你只是走过路过,顺道过来看看。
任何巧妙的解决方案都依赖特定的前提条件,否则就成为闭门造车。
最近看书学习有点偷懒好像,进展、成效都甚微。理理思绪,整好装备,全力以赴!
《机器学习算法的数学解析与Python实现》作者:莫凡
二、笔记
《机器学习算法的数学解析与Python实现》总结 |
算法 | 算法具体步骤 | 要点 | 优点 | 缺点 | 应用领域 | sklearn库 |
线性回归算法 | “三板斧”: 第一步:为假设函数设定参数W,通过假设函数画出一条直线,即根据输入的点通过线性计算得到预测值; 第二步:将预测值带入损失函数,计算出一个损失值; 第三步:通过得到的损失值,利用梯度下降等凸优化方法,不断调整假设函数的参数W,使得损失值最小。这个不断调整参数W使得损失值最小化的过程就是线性回归的学习过程,通常称为训练模型。 | 1.回归问题 2.线性方程 3.偏差度量 4.权值更新 | 1.线性模型形式简单; 2.可解释性强; 3.容易理解和实现 | 1.线性模型不能表达复杂的模式; 2.对于非线性问题表现不佳 | 线性回归适用的应用领域很广,包括金融领域和气象领域,特别适用于对能够用线性关系进行描述的问题领域,线性回归实现简单,遇到回归问题可以首先使用线性回归试试 | linear_model类库当前含39类,其中的典型类: LinearRegression类 Ridge类 Lasso类 LogisticRegression类 |
Logistic回归分类算法 | 三步: 第一步:为假设函数设定参数W,通过假设函数计算出一个预测值; 第二步:将预测值带入损失函数,计算出一个损失值; 第三步:通过得到的损失值,利用梯度下降等优化方法调整参数W。不断重复这个过程,使得损失值最小。 | 1.分类问题 2.Logistic函数 | 1.线性模型形式简单; 2.可解释性强; 3.容易理解和实现; 4.是计算代价较低的分类模型 | 分类的效果有时不好,容易欠拟合 | 适用于二分类领域,或作为其他算法的“部件”,如作为神经网络算法的激活函数 | |
KNN分类算法 | 三步: 第一步:找K个最近邻。KNN分类算法的核心就是找最近的K个点,选定度量距离的方法之后,以待分类样本点为中心,分别测量它到其他点的距离,找出其中的距离最近的“TOP K”,这就是K个最近邻; 第二步:统计最近邻的类别占比。确定了最近邻之后,统计出每种类别在最近邻中的占比; 第三步:选取占比最多的类别作为待分类样本的类别。 | 1.多数表决 2.距离 | 1.理论形式简单,容易实现; 2.新加入数据时不必对整个数据集进行重新训练 3.可以实现在线训练 | 1.对样本分布比较敏感; 2.正负样本不平衡时会对预测有明显影响; 3.数据集规模大时计算量将加大 | 模式识别、文本分类、多分类领域 | neighbors类库当前含13类,代表性类: KNeighborsClassifier类 KNeighborsRegressor类 RadiusNeighborsClassifier类 NearestNeighbors类 KDTree类 BallTree类 |
朴素贝叶斯 | 三步: 第一步:统计样本数据。需要统计先验概率P(y)和似然度P(x|y); 第二步:根据待遇测样本所包含的特征,对不同类分别进行后验概率计算。比如总的特征有A、B、C三项,但待测样本只包含A、C两项,那y1后验概率的计算方法就为P(y1)P(A|y1)P(B|y1); 第三步:比较y1,y2,...,yn的后验概率,哪个概率值最大就将其作为预测值输出。 | 1.条件概率 2.先验概率 3.后验概率 4.似然度 | 1.运用了统计学成熟的理论,可解释性强; 2.对于大规模数据集训练效率较高 | 对数据样本的特征维度作了“彼此独立”的假设,如果实际情况并非如此则可能导致预测偏差增加 | 常用于垃圾邮件分类,以及其他文本分类。 | naive_bayes类库包含四类: MultinomialNB类 BernoulliNB类 GaussianNB类 |
决策树分类算法 | 四步: 第一步:选定纯度度量指标; 第二步:利用纯度度量指标,依次计算依据数据集中现有的各个特征得到的纯度,选取纯度能达到最大的那个特征作为该次的“条件判断”; 第三步:利用该特征作为“条件判断”切分数据集,同时将该特征从切分后的子集中剔除(也即不能再用该特征切分子集了); 第四步:重复第二、第三步,直到再没有特征,或切分后的数据集均为同一类。 | 1.决策树的分类方法 2.分支节点划分 3.纯度度量 | 1.算法逻辑清晰,对程序员尤其友好; 2.树形结构容易可视化,能够比较直观地观察分类过程 | 1.最大也是最突出的缺点就是容易过拟合; 2.特征维度存在关联关系时也会对预测结果产生明显影响 | 适用于需要“决策”的领域,如商业决策、管理决策等,不过作为一种热门算法,决策树应用领域非常广泛 | tree类库中提供7个类,3个用于导出和绘制决策树,另外四类: DecisionTreeClassifier类 DecisionTreeRegressor类 ExtraTreeClassifier类 ExtraTreeRegressor类 |
支持向量机分类算法 | 三步: 第一步:选取一个合适的数学函数作为核函数; 第二步:核函数完成高维映射并完成计算间隔所需的内积运算,求得间隔; 第三步:使用SMO等算法使得间隔最大。 | 1.最大间隔 2.高维映射 3.核方法 | 1.能解决非线性问题; 2.训练不依赖全部数据; 3.能够较好地解决小样本分类问题; 4.泛化能力强 | 1.对非线性问题缺乏通解,在部分情况下要找到合适的核函数并不容易; 2.原始支持向量机只支持二分类 | 原始的支持向量机只适用于解决二分类问题,但已有多种方法将支持向量机拓展用于多分类问题,支持向量机作为一种热门算法,被广泛用于各种分类问题,如文本分类等 | svc类库中当前含8个类:具体为: LinearSVC类 LinearSVR类 SVC类 SVR类 NuSVC类 NuSVR类 OneClassSVM类:解决无监督学习的异常点检测问题 |
K-means聚类算法 | 五步: 第一步:随机选取K个对象,以它们为质心; 第二步:计算数据集到质心的距离; 第三步:将对象划归(根据距离哪个质心最近); 第四步:以本类内所有对象的均值重新计算质心,完成后进行第二步; 第五步:类不再变化后停止。 | 1.聚类问题 2.簇 3.质心 4.多数表决 | 1.原理简单; 2.容易实现; 3.运算效率高 | 1.需要人为地设置聚类的簇的个数; 2.只适用于特征维度为数值类型的数据; 3.随机初始化可能影响聚类的最终效果; 4.对孤立点非常敏感 | 适用于特征维度为数值型的聚类问题,如通过体育赛事中运动员的各类表现数据进行聚类 | cluster类库中当前含10个类,代表类如下: KMeans类 MiniBatchKMeans类 DBSCAN类 MeanShift类 AffinityPropagation类 |
神经网络分类算法 | 五步: 第一步:初始化神经网络中所有神经元激励函数的权值; 第二步:输入层接收输入,通过正向传播产生输出; 第三步:根据输出的预测值,结合实际值计算偏差; 第四步:输出层接收偏差,通过反向传播机制让所有神经元更新权值; 第五步:第2—4步是神经网络模型一次完整的训练过程,重复进行训练过程直到偏差最小。 | 1.神经元 2.兴奋传递 3.激活函数 4.反向传播机制 | 1.网络结构拓展性好; 2.对复杂的“神秘函数”如非线性函数,只通过简单地调节参数也往往能有令人意外的表现 | 1.可解释性差; 2.调参依赖经验; 3.可能陷入局部最优解 | 神经网络算法拟合能力强,应用领域很广,在文本分类等领域都有应用,其衍生出来的深度学习算法更是当前最为热门的机器学习算法分支,在图像处理、语音识别和自然语言处理等多个领域都有非常突出的表现 | neural_network类库中含3个类: MLPClassifier类 MLPRegressor类 BernoulliRBM类 |
集成学习方法 | 具体实现方式: 第一种:Bagging算法。并行集成学习方法 第二种:Boosting算法。串行集成学习方法 第三种:Stacking算法。学习期分两层,第一层若干弱学习器,第二层则通常只有一个学习模型,第二层学习期是基于第一层预测结果的预测 | 集成学习不是一款别具匠心的机器学习算法,而是一套组合多种机器学习模型的框架,它的适用面很广,可以用于分类问题、回归问题、特征选取和异常点检测等各类机器学习任务。 | sklearn库只直接提供了Bagging和Boosting两种集成学习方法,都在ensemble类库中。当前含有16个集成学习类,常用类有: RandomForestClassifier类 RandomForestRegressor类 ExtraTreesClassifier类 ExtraTreesRegressor类 AdaBoostClassifier类 AdaBoostRegressor类 GradientBoostingClassifier类 GradientBoostingRegressor类 |