机器学习python实战(用Python做科学计算工具篇)
机器学习python实战(用Python做科学计算工具篇)>>>>>> import numpy as np >>> x = np.array([0 1 2]) >>> y = np.array([0 1 2]) >>> X = x[: np.newaxis] # The input data for sklearn is 2D: (samples == 3 x features == 1) >>> X array([[0] [1] [2]]) >>> model.fit(X y) LinearRegression(copy_X=True fit_intercept=True n_jobs=1 normalize=True) 估计参数:当数据与估计器拟合时,参数是根据手
所需基本库
- NumPy
- scipy
- matplotlib
- 简介:问题设置
- 使用 scikit-learn 进行机器学习的基本原理
- 监督学习:手写数字的分类
- 监督学习:住房数据的回归
- 测量预测性能
- 无监督学习:降维和可视化
- 特征脸示例:链接 PCA 和 SVM
- 特征脸示例:链接 PCA 和 SVM
- 参数选择、验证和测试
每个算法都通过“Estimator”对象在 scikit-learn 中公开。例如线性回归是:sklearnnear_modelnearRegression
>>>
>>> from sklearnnear_model import LinearRegression
Estimator参数:实例化时可以设置Estimator的所有参数:
>>>
>>> model = LinearRegression(normalize=True)
>>> print(model.normalize)
True
>>> print(model)
LinearRegression(copy_X=True fit_intercept=True n_jobs=1 normalize=True)
拟合数据
让我们用numpy创建一些简单的数据:
>>>
>>> import numpy as np
>>> x = np.array([0 1 2])
>>> y = np.array([0 1 2])
>>> X = x[: np.newaxis] # The input data for sklearn is 2D: (samples == 3 x features == 1)
>>> X
array([[0]
[1]
[2]])
>>> model.fit(X y)
LinearRegression(copy_X=True fit_intercept=True n_jobs=1 normalize=True)
估计参数:当数据与估计器拟合时,参数是根据手头的数据估计的。所有估计的参数都是以下划线结尾的估计器对象的属性:
>>>
>>> model.coef_
array([1.])
6.2.2. 监督学习:分类和回归
在监督学习中,我们有一个由特征和标签组成的数据集。任务是构建一个Estimator,该估计器能够在给定特征集的情况下预测对象的标签。一个相对简单的例子是在给定一组花的测量值的情况下预测鸢尾花的种类。这是一个相对简单的任务。一些更复杂的例子是:
- 给定通过望远镜拍摄的物体的彩色图像,确定该物体是恒星、类星体还是星系。
- 给定一张人的照片,识别照片中的人。
- 给定一个人看过的电影列表和他们对电影的个人评价,推荐他们想要的电影列表(所谓的 推荐系统:一个著名的例子是Netflix Prize)。
这些任务的共同点是存在一个或多个与对象相关的未知量,需要从其他观察到的量中确定。
监督学习进一步分为两类, 分类和回归。在分类中,标签是离散的,而在回归中,标签是连续的。例如,在天文学中,确定一个物体是恒星、星系还是类星体的任务是一个分类问题:标签来自三个不同的类别。另一方面,我们可能希望根据这些观察来估计对象的年龄:这将是一个回归问题,因为标签(年龄)是一个连续的量。
分类:K 个最近邻(kNN)是最简单的学习策略之一:给定一个新的、未知的观察,在您的参考数据库中查找哪些具有最接近的特征并分配主要类别。让我们尝试一下我们的虹膜分类问题:
from sklearn import neighbors datasets
iris = datasets.load_iris()
X y = iris.data iris.target
knn = neighbors.KNeighborsClassifier(n_neighbors=1)
knn.fit(X y)
# What kind of iris has 3cm x 5cm sepal and 4cm x 2cm petal?
print(iris.target_names[knn.predict([[3 5 4 2]])])
萼片空间的图和 KNN 的预测
回归:最简单的回归设置是线性回归:
from sklearnnear_model import LinearRegression
# x from 0 to 30
x = 30 * np.random.random((20 1))
# y = a*x b with noise
y = 0.5 * x 1.0 np.random.normal(size=x.shape)
# create a linear regression model
model = LinearRegression()
model.fit(x y)
# predict y from the data
x_new = npnspace(0 30 100)
y_new = model.predict(x_new[: np.newaxis])
简单线性回归图
6.2.3. 回顾 Scikit-learn 的Estimator接口Scikit-learn 力求在所有方法中都有一个统一的接口,我们将在下面看到这些示例。给定一个名为 的 scikit-learn估计器 对象model,可以使用以下方法:
在所有估计器中: | |
| |
在有监督的估计器中: | |
| |
在无监督估计器中: | |
|
训练误差假设你使用的是1-近邻估计器。估计你的训练集会出多少差错?
- 训练集误差并不是一个很好的测量预测性能的方法。你需要省略一个测试集。
- 一般来说,我们应该接受训练集上的错误。
正则化的一个例子正则化背后的核心思想是,我们将更喜欢更简单的模型,为了一个特定的“更简单”的定义,即使它们会导致训练集更多的错误。
举个例子,我们用一个带噪声的九阶多项式来生成:
现在,让我们为数据拟合一个 4 阶和 9 阶多项式。
用你的肉眼,你更喜欢哪个型号,四阶还是九阶?
我们看看基本事实:
正则化在机器学习中无处不在。大多数 scikit-learn 估计器都有一个参数来调整正则化的数量。例如,对于 k-NN,它是“k”,即用于做出决策的最近邻的数量。k=1 等于没有正则化:训练集上的误差为 0,而较大的 k 将推动特征空间中更平滑的决策边界。
简单与复杂的分类模型
线性分离 |
非线性分离 |
对于分类模型,分隔类的决策边界表示模型的复杂性。例如,基于特征的线性组合做出决策的线性模型比非线性模型更复杂。
相关文章:
- 用Python做科学计算(工具篇)——scikit-learn(机器学习)1
- 用Python做科学计算(工具篇)——1.1. NumPy 数组对象
- 用Python做科学计算(工具篇)——scipy 使用指南
- 用Python做科学计算——matplotlib绘图实例
- 用Python做科学计算(工具篇)——numpy1.2.数组的数值运算
- 用Python做科学计算(工具篇)——sympy使用指南(符号运算)
- 用Python做科学计算(工具篇)——numpy1.3 更精细的数组
- 用Python做科学计算(工具篇)——numpy1.4 高级操作