机器学习是当下统计学与计算机科学相结合的产物,关于机器学习,并没有统一的定义描述。机器学习(machine leaning) 也称统计学习(statistical learning)。
一个完整的机器学习算法的三要素:
关于数据,生产实践中得到的数据往往是可能包含大量缺失值、冗余值的“脏数据。对此”需要特征工程进行预处理,
关于模型,即使用的机器学习算法,其依赖于数据的特点及研究人员经验。
关于性能度量准则,性能度量准则用于指导模型参数求解。
训练机器学习模型时对大量的参数进行反复调整或者搜索,称为“调参”;
训练之前调整设置的参数,称为“超参数”。
根据模型预测输出的连续性,可以将与机器学习算法适配的问题划分为分类问题和回归问题。
有时候,回归问题和分类问题可以相互转化,如在估计人的年龄时,假设绝大多数人的年龄都在0-100岁,此时该问题既可以看成回归问题,也可以看出分类问题。(即回归值范围有限且适合作为类别看待)
根据样本集合中是否包含标签,以及包含标签的多少,可以将机器学习分为监督学习、半监督学习 和 无监督学习。
根据机器学习模型是否可以用于生成新数据,可以将机器学习模型分为生成模型和判别模型。
生成模型,指通过机器学习算法,从训练集中学习到 输入和输出的联合概率分布P(X,Y)。
判别模型,指通过机器学习算法,计算 一个条件概率分布P(X,Y),即后验概率分布。
建模前,通常需要把数据划分为训练集、验证集和测试集。
**泛化能力(generalization ability)**是指机器学习算法对新鲜样本的适应能力。
在训练集上,训练过程中使用训练误差 来衡量模型对训练数据 的拟合能力。
在测试集上,使用泛化误差来测试模型的泛化能力。
在模型得到充分训练的条件下,训练误差与泛化误差之间的差异越小,说明模型的泛化性能越好,得到一个泛化性好的模型是机器学习的目的。
训练误差和测试误差往往选择的是同一性能度量函数,只是作用的数据集不同。
当训练损失较大的时候,说明模型不能对数据进行很好的拟合,这样的情况称为欠拟合。
当训练误差小且明显低于泛化误差时,称这种情况为过拟合。
对于欠拟合的情况,通常是由模型本身不能对训练集进行拟合或者训练迭代次数太少。解决欠拟合的方法是对模型进行改进,设计新的模型进行训练,增加训练过程的迭代次数等。
对于过拟合的情况,往往是由于数据量太少或者模型太复杂导致。可以通过增加数据量,对模型进行裁剪、正则化的方式来缓解。
正则化是一种抑制模型复杂度的常用方法。正则化用模型参数 ω \omega ω的p范数表示为
常用正则化方式为p=1或p=2的情形。分别称为L1正则化和L2正则化。
正则化项一般作为损失函数的一部分被加入到原来的基于数据损失函数中。
经验损失:基于数据的损失函数又被称为经验损失。
正则化项又称为结构损失。
若将原本基于数据的损失函数记为J,带有正则化项的损失函数记为 J N J_N JN,则最终的损失函数可记为
其中 λ \lambda λ是用于在模型的经验损失和结构损失之间平衡的超参数。
sklearn.datasets中收录了一些数据集,如鸢尾花数据集,葡萄酒数据集等。
这些数据集通过一系列的load函数加载,如鸢尾数据集是通过sklearn.datasets.load_iris()函数加载的。
from sklearn.datasets import load_iris
iris = load_iris()
x = iris.data
y = iris.target
该数据150个样本,每个样本有四个特征:花萼长,花萼宽,花瓣长,花瓣宽
样本的标签分为三个类别,分别是0,1,2,分别表示Setosa,Versicolour和Virginica3个类别。
from sklearn.datasets import load_wine
wine = load_wine()
x = wine.data
y = wine.target
该数据集有178条记录,每个样本有13个特征,分别对应着葡萄酒的某属性。标签有三个,是葡萄酒的起源地。
from sklearn.datasets import load_boston
boston = load_boston()
x = boston.data
y = boston.target
该数据集有506条数据,13个特征,标签为平均房价。此数据样本是连续变量,适合做回归模型。
from sklearn.datasets import load_breast_cancer
breast_cancer = load_breast_cancer()
x = breast_cancer.data
y = breast_cancer.target
该数据集一共有569条数据,其中有357例为乳腺癌数据,212例为非乳腺癌数据。数据集包含有30个特征。标签则为两个。适合二分类算法测试。
以波士顿房价数据为例
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
boston = load_boston()
x = boston.data
y = boston.target
x_train, x_test, y_train, y_test = train_test_split(x, y)
详细用法可点击链接跳转学习。
参考:
<<<统计学习方法— 李航>>>