请 [注册] 或 [登录]  | 返回主站

量化交易吧 /  量化平台 帖子:3365793 新帖:0

【机器学习】了解分类与回归、过拟合与欠拟合

不做外汇索罗斯发表于:5 月 9 日 23:29回复(1)

机器学习

从本节开始,将涉及到更多的机器学习算法。这次,听取@xiaokuan的建议,减少输出的数据量,优化显示格式,以达到比较舒适的阅读效果。
祝各们宽友在新的一年里日进斗金,祝聚宽越做越好!

另外,如果在研究中想使用mglearn模块,各位可以在Anaconda的Pormpt里输入:pip install mglearn进行安装。

# 在学习之前,先导入这些常用的模块
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import mglearn

了解分类与回归

监督机器学习问题主要有两种,一个是分类,一个是回归

分类是对目标进行预测,然后对其分成不同的类别,每种类别有对应的标签。分类一分有二分类多分类两种情况,在二分类中,通常将其中一类叫作正类,另一类叫做负类,至于谁是正类谁是负类,完全可以按照实际情况来决定。

回归是对目标进行预测,得出一个连续值,这个连续值可以对数据的表现得出一个趋势性的解释。在编程术语中,这个连续值叫做浮点数,在数学术语中叫做实数

分类示例图:

回归示例图:

了解泛化、过拟合与欠拟合

泛化:如果一个模型能够对没有见过的数据做出准确预测,我们就说这唑训练集泛化到测试集。

过拟合:模型在训练数据中表现过度优越,而在新的数据中则表现不佳,此种情况被称作过拟合。

欠拟合:模型无法抓取数据的重要特征,而在训练集与测试集表现都很差,此种情况被称作欠拟合。

下图依次表现了欠拟合、泛化、过拟合与的表现形式:

模型复杂度与数据集大小的关系

一般来说,数据量越大,其变化的范围也就越大,在不发生过拟合的前提下,可使用的模型就越复杂。因此,数据量的大小对模型的影响非常大,永远不要低估更多数据的力量。

了解机器学习算法使用的数据

没有必要通读每个算法的详细描述,但瑞星杀毒软件模型可以让你更好地理解机器学习算法的各种工作原理!

首先,展示一个二分类数据集示例,这个数据被封装在mglearn的forge数据集中,它有两个特征。

# 生成数据
X, y = mglearn.datasets.make_forge()
# 数据集绘图
mglearn.discrete_scatter(X[:, 0], X[:, 1], y)
plt.legend(['Class 0', 'Class 1'], loc=4)
plt.xlabel('First feature')
plt.ylabel('Second feature')
print('数据结构:{}'.format(X.shape))
数据结构:(26, 2)

上图的示例,是一个二分类的展示示例,圆点表示一类,三角表示另一个,机器学习期望从这个数据里能将它们正确区分开来。

接下来,展示一个用于回归算法的示例,该数据集在mglearn的wave中,该数据集只有一个输入特征和一个连续的目标变量(或响应),后者是模型想要预测的对象。

X, y = mglearn.datasets.make_wave(n_samples=40)
plt.plot(X, y ,'o')
plt.ylim(-3, 3)
plt.xlabel('Feature')
plt.ylabel('Target')
Text(0,0.5,'Target')

以上两例中的数据都是二维数据,这种数据被称作低维度数据,如果有较多特征的数据,则被叫做高维度数据,低维度数据中得出的结论一般不适用于高维度数据,但对于学习算法是很有记性的。

另外,因为我们研究机器学习使用的是scikit-leran模型,该模块中也内置了许多可供研究的数据,比如威斯康星州乳腺癌数据集(简称cancer),里面记录了乳腺癌肿瘤的临床测量数据。每个肿瘤都被标记为“良性”或“恶性”,其任务是其于人体组织的测量数据来学习预测肿瘤是否为恶性。该数据集可被用来做分类学习

该数据可以用 scikit-learn 模块的 load_breast_cancer 函数来加载:

from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()
cancer.keys()
dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names'])
print('这个数据集共包含569个数据点,每个数据点有30个特征。')
print(cancer.data.shape)
这个数据集共包含569个数据点,每个数据点有30个特征。
(569, 30)
print('数据一种被标记为恶性,一种被标记为良性',cancer.target_names)
数据一种被标记为恶性,一种被标记为良性 ['malignant' 'benign']
print('其中212个被标记为恶性,357个被标记为记性',np.bincount(cancer.target))
其中212个被标记为恶性,357个被标记为记性 [212 357]
print('显示所有的特征标签')
print(cancer.feature_names)
显示所有的特征标签
['mean radius' 'mean texture' 'mean perimeter' 'mean area'
 'mean smoothness' 'mean compactness' 'mean concavity'
 'mean concave points' 'mean symmetry' 'mean fractal dimension'
 'radius error' 'texture error' 'perimeter error' 'area error'
 'smoothness error' 'compactness error' 'concavity error'
 'concave points error' 'symmetry error' 'fractal dimension error'
 'worst radius' 'worst texture' 'worst perimeter' 'worst area'
 'worst smoothness' 'worst compactness' 'worst concavity'
 'worst concave points' 'worst symmetry' 'worst fractal dimension']

sklearn 中还包括用于回归学习的数据集,例如波士顿房价数据集。与这个数据集相关的任务是,利用犯罪率、是否邻近查尔斯河、公路可达性等信息,来预测20世纪70年代波士顿地区房价的中位数。

from sklearn.datasets import load_boston
boston = load_boston()
print('查看数据形状', boston.data.shape)
查看数据形状 (506, 13)

这里不再具体详细列出该数据的具体细节,之后将详细使用这两个数据进行学习。有兴趣的的话,各位可以打印出各属性看看。

从本节开始,将涉及到更多的机器学习算法。这次,听取@xiaokuan的建议,减少输出的数据量,优化显示格式,以达到比较舒适的阅读效果。 祝各们宽友在新的一年里日进斗金,祝聚宽越做越好!

另外,如果在研究中想使用mglearn模块,各位可以在Anaconda的Pormpt里输入:pip install mglearn进行安装。

# 在学习之前,先导入这些常用的模块
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import mglearn

了解分类与回归¶

监督机器学习问题主要有两种,一个是分类,一个是回归

分类是对目标进行预测,然后对其分成不同的类别,每种类别有对应的标签。分类一分有二分类多分类两种情况,在二分类中,通常将其中一类叫作正类,另一类叫做负类,至于谁是正类谁是负类,完全可以按照实际情况来决定。

回归是对目标进行预测,得出一个连续值,这个连续值可以对数据的表现得出一个趋势性的解释。在编程术语中,这个连续值叫做浮点数,在数学术语中叫做实数

分类示例图: image.png

回归示例图: image.png

了解泛化、过拟合与欠拟合¶

泛化:如果一个模型能够对没有见过的数据做出准确预测,我们就说这唑训练集泛化到测试集。

过拟合:模型在训练数据中表现过度优越,而在新的数据中则表现不佳,此种情况被称作过拟合。

欠拟合:模型无法抓取数据的重要特征,而在训练集与测试集表现都很差,此种情况被称作欠拟合。

下图依次表现了欠拟合、泛化、过拟合与的表现形式:

image.png

模型复杂度与数据集大小的关系¶

一般来说,数据量越大,其变化的范围也就越大,在不发生过拟合的前提下,可使用的模型就越复杂。因此,数据量的大小对模型的影响非常大,永远不要低估更多数据的力量。

了解机器学习算法使用的数据¶

没有必要通读每个算法的详细描述,但瑞星杀毒软件模型可以让你更好地理解机器学习算法的各种工作原理!

首先,展示一个二分类数据集示例,这个数据被封装在mglearn的forge数据集中,它有两个特征。

# 生成数据
X, y = mglearn.datasets.make_forge()
# 数据集绘图
mglearn.discrete_scatter(X[:, 0], X[:, 1], y)
plt.legend(['Class 0', 'Class 1'], loc=4)
plt.xlabel('First feature')
plt.ylabel('Second feature')
print('数据结构:{}'.format(X.shape))
数据结构:(26, 2)
C:\Users\Administrator\Anaconda3\lib\site-packages\sklearn\utils\deprecation.py:77: DeprecationWarning: Function make_blobs is deprecated; Please import make_blobs directly from scikit-learn
  warnings.warn(msg, category=DeprecationWarning)

上图的示例,是一个二分类的展示示例,圆点表示一类,三角表示另一个,机器学习期望从这个数据里能将它们正确区分开来。

接下来,展示一个用于回归算法的示例,该数据集在mglearn的wave中,该数据集只有一个输入特征和一个连续的目标变量(或响应),后者是模型想要预测的对象。

X, y = mglearn.datasets.make_wave(n_samples=40)
plt.plot(X, y ,'o')
plt.ylim(-3, 3)
plt.xlabel('Feature')
plt.ylabel('Target')
Text(0,0.5,'Target')

以上两例中的数据都是二维数据,这种数据被称作低维度数据,如果有较多特征的数据,则被叫做高维度数据,低维度数据中得出的结论一般不适用于高维度数据,但对于学习算法是很有记性的。

另外,因为我们研究机器学习使用的是scikit-leran模型,该模块中也内置了许多可供研究的数据,比如威斯康星州乳腺癌数据集(简称cancer),里面记录了乳腺癌肿瘤的临床测量数据。每个肿瘤都被标记为“良性”或“恶性”,其任务是其于人体组织的测量数据来学习预测肿瘤是否为恶性。该数据集可被用来做分类学习

该数据可以用 scikit-learn 模块的 load_breast_cancer 函数来加载:

from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()
cancer.keys()
dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names'])
print('这个数据集共包含569个数据点,每个数据点有30个特征。')
print(cancer.data.shape)
这个数据集共包含569个数据点,每个数据点有30个特征。
(569, 30)
print('数据一种被标记为恶性,一种被标记为良性',cancer.target_names)
数据一种被标记为恶性,一种被标记为良性 ['malignant' 'benign']
print('其中212个被标记为恶性,357个被标记为记性',np.bincount(cancer.target))
其中212个被标记为恶性,357个被标记为记性 [212 357]
print('显示所有的特征标签')
print(cancer.feature_names)
显示所有的特征标签
['mean radius' 'mean texture' 'mean perimeter' 'mean area'
 'mean smoothness' 'mean compactness' 'mean concavity'
 'mean concave points' 'mean symmetry' 'mean fractal dimension'
 'radius error' 'texture error' 'perimeter error' 'area error'
 'smoothness error' 'compactness error' 'concavity error'
 'concave points error' 'symmetry error' 'fractal dimension error'
 'worst radius' 'worst texture' 'worst perimeter' 'worst area'
 'worst smoothness' 'worst compactness' 'worst concavity'
 'worst concave points' 'worst symmetry' 'worst fractal dimension']

sklearn 中还包括用于回归学习的数据集,例如波士顿房价数据集。与这个数据集相关的任务是,利用犯罪率、是否邻近查尔斯河、公路可达性等信息,来预测20世纪70年代波士顿地区房价的中位数。

from sklearn.datasets import load_boston
boston = load_boston()
print('查看数据形状', boston.data.shape)
查看数据形状 (506, 13)

这里不再具体详细列出该数据的具体细节,之后将详细使用这两个数据进行学习。有兴趣的的话,各位可以打印出各属性看看。

 

全部回复

0/140

达人推荐

量化课程

    移动端课程