sklearn数据集与估计器
数据集划分
正如前文所说,我们需要一些数据来建立模型,然后该模型会根据输入的特征值预测对应的目标值。但我们的数据是一定的。这就导致了我们要将数据划分两部分,一部分用来训练模型,一部分用来作为测试用。那么它们的比例大约为多少那?
eg 训练集 测试集
70% 30%
80% 20%
但其实数据的划分有好多中,例如西瓜书中第二章介绍的 留出法,交叉验证法,自助法。
sklearn数据集划分API
sklearn.model_selection.train_test_split
sklearn数据集接口介绍
自己也可以找到一些数据集,但费时,可能效果也不好。sklearn自带一些数据集,在我们需要时可以直接使用。
eg 鸢尾花数:
sklearn分类数据集
eg 鸢尾花数:sklearn.datasets.load_iris()
数字数据集:sklearn.datasets.load_digits()
sklearn回归数据集
比较有名的就是20newsgroups
波士顿房价:sklearn.datasets.load_boston()
糖尿病数据集:sklearn.datasets.load_diabetes()
转换器与预估器
在前面提到过,对于机器学习就是利用训练集建立模型,然后输入测试集的特征值根据该模型得出预估值。而对于sklearn来说为特征工程的两步。
1.实例化
2.调用fit_transform
fit即为建立根据训练集建立模型。
eg
而transform则为进行数据转换。
即。转换,输入和输出一致,相当于把一种数据转换为另一种数据,一般用于特征抽取和转换,通常会转换为向量,比如正则化/统一化
估计器
在sklearn中,估计器(estimator)是一个重要的角色,分类器和回归器都属于estimator,是一类实现了算法的API。
分类算法-k近邻算法
k临近算法的简单描述为,根据距离你最近的邻居来推断出你的类别。属于分类算法。
具体定义:如果一个样本在特征空间中的k个最相似的样本中的大多数属于某一类别,那么该样本同样属于这个类别。而其具体运算公式为:
很明显就是简单的距离公式。
还有一个问题,我们由该公式可以得出,假如他们之间的差值过大,那么一定会影响到对应的精度。我们在上一章提到过。为减少异常点而提出的方法,称为标准化。所以我们在进行knn时要考虑将数据进行标准化。
分类模型的评估
正如我们需要判定一个具体的物品好坏一样。我们也需要一个方法来判断模型的好坏。一般最常见的是准确率。
eg.
但西瓜书上依旧有许多不同的方法。先给大家介绍一下混淆矩阵。
分类算法-朴素贝叶斯算法
朴素贝叶斯的前提是特征独立。而所谓特征独立,指的是各个特征之间没有关联。可以使用概率公式来求。
由图可以得出依照上述的公式求解会出现某个类别为0的情况,这很明显不太适合。为解决上述问题。我们提出一个新的概念。
拉普拉斯平滑
在引入拉普拉斯平滑后原本的计算结果变为。
不再出现某个类别为0的情况。
模型的选择与调优
交叉验证
我们拿到的数据集一般情况下会分为训练集和测试集。而所谓的交叉验证就是将数据均等的分成n份,然后每次选一份作为测试集。经过n次,取平均值作为结果。
如下图所示。
网格搜索
下在进行网格搜索前,先引入一个超参数的概念。
所谓超参数即为需要手动指定的参数。如k-近邻算法中的k值。在sklearn中代码如下所示。
但是手动调参过程复杂,所以我们设计一个列表将我们想要填写的参数全都放进去,然后在调参时让系统自动替我们选择最适合的参数。这个过程称为超参数搜索--网格搜索。
反映到代码上如下:
决策树与随机森林
决策树 :本质是树结构,类似于数据结构中的二叉树。会随着条件的不同做出不同的决策。
eg
那么又出现一个问题。根节点应该是哪一个特征那?这棵树的各个节点该如何划分那?
那么我们就要引入一个新的概念称为信息熵。
引信息熵越大,那么不确定性就越大,而不确定性越大那么预测的就越不准确。那么我们从上到下的节点顺序就应该是最能够减少不确定性的特征放在最前面。决策树就是根据信息增益的大小来确定特征值。
前面提到的knn需要标准化,但在决策树中,我们并没有用到标准化。这也是它的优点。
改进:
减枝cart算法
随机森林
随机森林:
在讨论随机森林之前我们先了解一下什么是集成学习方法。所谓集成学习方法是指通过建立几个模型组合来解决单一预测问题。它的工作原理是生成多个模型,各自独立地学习和做出预测。这些预测最后结合成单预测,因此优于任何一个单分类做出的预测。
那么什么是随机森林那?
在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定的。
eg。如果你训练了5课树,其中有4棵树的结果是True,一棵树的结果是False,那么最终的结果也会是True。