1.有监督学习和无监督学习
1.1 监督学习:通常对具有标记分类的训练样本特征进行学习,标记即已经知道其对应正确分类答案;而学习则本质是找到特征与标签(正确答案)之间的关系(函数),从而当训练结束,输入无标签的数据时,可以利用已经找出的关系方法进行分析得出数据标签。
常用的监督机器学习方法有如人工神经网络,决策树,传统贝叶斯分类器,支撑向量机(SVM)等。
监督学习的主要用途通常用来进行样本分类与回归(找到最为接近的函数用于预测),而又根据其输出结果连续还是离散分为回归分析(Regression)与分类(Classification)。
1.2 无监督学习则通常学习数据只有特征向量,没有标签(答案),学习模型通过学习特征向量发现其内部规律与性质,从而把数据分组聚类(Clustering)。
无监督学习更类似我们的真实世界,去探索发现一些规律及分类。
常用的无监督学习方法有: K-Means, 层次化聚类(Hierarchical Clustering),社交网络分析,一些数据挖掘算法等。
无监督学习的用途则主要用来在未知(无标签)数据中发现相似或者隐藏结构并进行聚类(Clustering),或者发现数据对应输入空间的分布之密度估计等。
当然对于数据样本介于无标记及部分标记之间,这种机器学习则被称为半监督学习(semi-supervised learning)
2.回归算法
机器学习中的回归算法的本质是通过对样本数据的收集,给出假设的函数模型,而此函数包含未知参数,机器学习的过程就是解方程或者找到最优解,当验证通过后,从而可以用该函数去预测测试新数据。
线性回归就是寻找一条最优的直线来拟合数据(可以扩展到多维),最优则通过数学上的最小二乘原理,有且只有一条直线函数,使得寻找的直线目前给定的函数值与模型预测值之差的平方和最小,即损失函数;当然其具体程序的算法实现则借鉴了数值计算的梯度下降法。
非线性回归,基本属于统计学范畴。非线性的意思就是至少有一个变量的指数不是1,如二次回归,或者函数来讲有幂函数,指数函数,对数函数,S函数等。
3.泛化、过拟合与欠拟合
泛化:如果一个模型能够对没见过的数据做出准确预测,我们就说,我们就说它能够从训练集泛化到测试集;
过拟合:如果在拟合模型时过分关注训练集的细节,得到了一个在训练集上表现很好、但不能泛化到新数据上的模型,那么就存在过拟合。
欠拟合:如果模型过于简单,可能无法抓住数据的全部
内容以及数据中的变化,你的模型甚至在训练集上的表现就很差。选择过于简单的模型被称为欠拟合。
4.k近邻
想要对新数据点做出预测,算法会在训练数据集中找到最近的数据点,也就是它的“最近邻”。
除了仅考虑最近邻,我还可以考虑任意个(k 个)邻居。这也是 k 近邻算法名字的来历。
5.线性模型
线性回归,或者普通最小二乘法(ordinary least squares,OLS),是回归问题最简单也最经典的线性方法。线性回归寻找参数 w 和 b,使得对训练集的预测值与真实的回归目标值 y之间的均方误差最小。均方误差(mean squared error)是预测值与真实值之差的平方和除以样本数。
6.岭回归
岭回归也是一种用于回归的线性模型,因此它的预测公式与普通最小二乘法相同。但在岭回归中,对系数(w)的选择不仅要在训练数据上得到好的预测结果,而且还要拟合附加约束。我们还希望系数尽量小。换句话说,w 的所有元素都应接近于 0。直观上来看,这意味着每个特征对输出的影响应尽可能小(即斜率很小),同时仍给出很好的预测结果。这种约束是所谓正则化(regularization)的一个例子。正则化是指对模型做显式约束,以避免过拟合。岭回归用到的这种被称为 L2 正则化。
可以看出,Ridge 在训练集上的分数要低于 LinearRegression,但在测试集上的分数更高。这和我们的预期一致。线性回归对数据存在过拟合。Ridge 是一种约束更强的模型,所以更不容易过拟合。复杂度更小的模型意味着在训练集上的性能更差,但泛化性能更好。由于我们只对泛化性能感兴趣,所以应该选择 Ridge 模型而不是 LinearRegression 模型。
Ridge 模型在模型的简单性(系数都接近于 0)与训练集性能之间做出权衡。简单性和训练集性能二者对于模型的重要程度可以由用户通过设置 alpha 参数来指定。在前面的例子中,我们用的是默认参数 alpha=1.0。但没有理由认为这会给出最佳权衡。alpha 的最佳设定值取决于用到的具体数据集。增大 alpha 会使得系数更加趋向于 0,从而降低训练集性能,但可能会提高泛化性能。
7.lasso
除了 Ridge,还有一种正则化的线性回归是 Lasso。与岭回归相同,使用 lasso 也是约束系数使其接近于 0,但用到的方法不同,叫作 L1 正则化。
L1 正则化的结果是,使用 lasso 时某些系数刚好为 0。这说明某些特征被模型完全忽略。这可以看作是一种自动化的特征选择。某些系数刚好为 0,这样模型更容易解释,也可以呈现模型最重要的特征。
Lasso 在训练集与测试集上的表现都很差。这表示存在欠拟合,我们发现模型只用到了 105 个特征中的 4 个。与 Ridge 类似,Lasso 也有一个正则化参数 alpha,可以控制系数趋向于 0 的强度。在上一个例子中,我们用的是默认值 alpha=1.0。为了降低欠拟合,我们尝试减小 alpha。这么做的同时,我们还需要增加 max_iter 的值(运行迭代的最大次数);
alpha 值变小,我们可以拟合一个更复杂的模型,在训练集和测试集上的表现也更好。模型性能比使用 Ridge 时略好一点,但如果把 alpha 设得太小,那么就会消除正则化的效果,并出现过拟合,得到与LinearRegression 类似的结果.
在实践中,在两个模型中一般首选岭回归。但如果特征很多,你认为只有其中几个是重要的,那么选择 Lasso 可能更好。同样,如果你想要一个容易解释的模型,Lasso 可以给出更容易理解的模型,因为它只选择了一部分输入特征。scikit-learn 还提供了 ElasticNet类,结合了 Lasso 和 Ridge 的惩罚项。在实践中,这种结合的效果最好,不过代价是要调节两个参数:一个用于 L1 正则化,一个用于 L2 正则化。
8.L1与L2正则化
L1 正则化公式,直接在原来的损失函数基础上加上权重参数的绝对值;
L2 正则化公式,直接在原来的损失函数基础上加上权重参数的平方和
如果你假定只有几个特征是真正重要的,那么你应该用L1 正则化,否则应默认使用 L2 正则化。如果模型的可解释性很重要的话,使用 L1 也会有帮助。由于 L1 只用到几个特征,所以更容易解释哪些特征对模型是重要的,以及这些特征的作用
9.Logistic Regression
根据现有数据对分类边界线(Decision Boundary)建立回归公式,以此进行分类。LR回归是在线性回归模型的基础上,使用sigmoid函数,将线性模型 w^Tx 的结果压缩到 [0,1] 之间,使其拥有概率意义。在不同类别样本点的特征x输入后,被分到对应的分类中,sigmoid值可以认为是一个概率值,从0~1,当>0.5,分到1类,<=0.5分到0类
10.决策树
决策树是广泛用于分类和回归任务的模型。本质上,它从一层层的 if/else 问题中进行学习,并得出结论
从根节点开始,对实例的某一特征进行测试,根据测试结果将实例分配到其子节点,此时每个子节点对应着该特征的一个取值,如此递归的对实例进行测试并分配,直到到达叶节点,最后将实例分到叶节点的类中。
决策树有两个优点:一是得到的模型很容易可视化,非专家也很容易理解(至少对于较小的树而言);二是算法完全不受数据缩放的影响。由于
每个特征被单独处理,而且数据的划分也不依赖于缩放,因此决策树算法不需要特征预处理,比如归一化或标准化。特别是特征的尺度完全不一样时或者二元特征和连续特征同时存在时,决策树的效果很好。
决策树的主要缺点在于,即使做了预剪枝,它也经常会过拟合,泛化性能很差。
10.1为什么要剪枝?
如果我们不限制决策树的深度,它的深度和复杂度都可以变得特别大。因此,未剪枝的树容易过拟合,对新数据的泛化性能不佳。
10.2剪枝方式
防止过拟合有两种常见的策略:一种是及早停止树的生长,也叫预剪(pre-pruning);另一种是先构造树,但随后删除或折叠信息量很少的结点,也叫后剪枝(post-pruning)或剪枝(pruning)。预剪枝的限制条件可能包括限制树的最大深度、限制叶结点的最大数目,或者规定一个结点中数据点的最小数目来防止继续划分
后剪枝:选择减掉哪些子树时,可以计算没有减掉子树之前的误差和减掉子树之后的误差,如果相差不大,可以将子树减掉。
11.随机森林
每棵树的预测可能都相对较好,但可能对部分数据过拟合。
如果构造很多树,并且每棵树的预测都很好,但都以不同的方式过拟合,那么我们可以对这些树的结果取平均值来降低过拟合。既能减少过拟合又能保持树的预测能力.
12.GBDT
梯度提升回归树是另一种集成方法,通过合并多个决策树来构建一个更为强大的模型。虽然名字中含有“回归”,但这个模型既可以用于回归也可以用于分类。与随机森林方法不同,梯度提升采用连续的方式构造树,每棵树都试图纠正前一棵树的错误。默认情况下,梯度提升回归树中没有随机化,而是用到了强预剪枝。梯度提升树通常使用深度很小(1到 5 之间)的树,这样模型占用的内存更少,预测速度也更快。
梯度提升背后的主要思想是合并许多简单的模型(在这个语境中叫作弱学习器),比如深度较小的树。每棵树只能对部分数据做出好的预测,因此,添加的树越来越多,可以不断迭代提高性能.
除了预剪枝与集成中树的数量之外,梯度提升的另一个重要参数是 learning_rate(学习率),用于控制每棵树纠正前一棵树的错误的强度。较高的学习率意味着每棵树都可以做出较强的修正,这样模型更为复杂。通过增大 n_estimators 来向集成中添加更多树,也可以增加模型复杂度,因为模型有更多机会纠正训练集上的错误.
13.朴素贝叶斯
朴素贝叶斯模型如此高效的原因在于,它通过单独查看每个特征来学习参数,并从每个特征中收集简单的类别统计数据。scikit-learn 中实现了三种朴素贝叶斯分类器:GaussianNB、BernoulliNB 和 MultinomialNB。GaussianNB 可 应 用 于 任 意 连 续 数 据, 而BernoulliNB 假定输入数据为二分类数据,MultinomialNB 假定输入数据为计数数据(即每个特征代表某个对象的整数计数,比如一个单词在句子里出现的次数)。BernoulliNB 和
MultinomialNB 主要用于文本数据分类.
14.支持向量机
在训练过程中,SVM 学习每个训练数据点对于表示两个类别之间的决策边界的重要性。通常只有一部分训练数据点对于定义决策边界来说很重要:位于类别之间边界上的那些点。这些点叫作支持向量(support vector),支持向量机正是由此得名。
想要对新样本点进行预测,需要测量它与每个支持向量之间的距离。分类决策是基于它与支持向量之间的距离以及在训练过程中学到的支持向量重要性(保存在 SVC 的 dual_coef_属性中)来做出的.
数据点之间的距离由高斯核给出:
krbf (x1, x2) = exp (-γ‖x1 - x2‖^2)
这里 x1 和 x2 是数据点,‖x1 - x2‖ 表示欧氏距离,γ(gamma)是控制高斯核宽度的参数
Python数据分析算法笔记
最新推荐文章于 2024-08-22 00:03:42 发布