赞
踩
机器学习中监督学习模型的任务重点在于,根据已有经验知识对未知样本的目标/标记进行预测。根据目标预测变量的类型不同,我们把监督学习任务大体分为分类学习与回归预测两类。
整理一下监督学习任务的基本架构和流程:首先准备训练数据,可以是文本、图像、音频等;然后抽取所需要的特征,形成特征向量;接着,把这些特征向量连同对应的标记/目标一并送入学习算法中,训练出一个预测模型;然后采用同样的特征抽取方法作用于新测试数据,得到用于测试的特征向量;最后,使用预测模型对这些待测试的特征向量进行预测并得到结果。
监督学习任务的基本架构和流程如下:
1、分类学习是最为常见的监督学习问题,其中最为基础的是二分类问题,即判断是非,从两个类别中选择一个作为预测结果;除此之外还有多分类问题,即在多于两个类别中选择一个;甚至还有多标签分类问题,与上述二分类以及多分类问题不同,多标签分类问题判断一个样本是否同时属于多个不同类型。
1.1 线性分类器是一种假设特征与分类结果存在线性关系的模型。这个模型通过累加计算每个维度的特征与各自权重的乘积来帮助类别决策。然而我们所要处理的最简单的二分类问题希望结果在0和1之间;因此需要一个函数把线性函数的结果(实数)映射到0到1之间。于是我们想到了逻辑斯蒂函数。
为了学习到决定模型的参数,我们普遍采用一种精确计算的解析算法和一种快速估计的随机梯度上升算法。我们将使用之前的“良/恶性乳腺癌肿瘤预测”数据为例子,来实践这里的逻辑斯蒂回归分类器。但不同的是,本次将完整地使用该数据所有的特征作为训练分类器参数的依据,同时采用更为精细的测评指标来对模模型性能进行评价。
该原始数据共有699条样本,每条样本有11列不同的数值:1列用于检索的id,9列与肿瘤相关的医学特征,以及一列表征肿瘤类型的数值。所有9列用于表示肿瘤医学特质的数值均被量化为1~10之间的数字,而肿瘤的类型也借由数字2和数字4分别指代良性与恶性。不过,这份数据也声明其中包含16个缺失值,并用“?”标出。事实上,缺失值问题广泛存在于现实数据中,也是机器学习任务无法回避的问题。
- # -*- coding:utf-8 -*-
- # 导入pandas与numpy工具包。
- import pandas as pd
- import numpy as np
-
- # 创建特征列表。
- column_names = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape', 'Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin', 'Normal Nucleoli', 'Mitoses', 'Class']
-
- # 使用pandas.read_csv函数从互联网读取指定数据。
- data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data', names = column_names )
-
- # 将?替换为标准缺失值表示。
- data = data.replace(to_replace='?', value=np.nan)
- # 丢弃带有缺失值的数据(只要有一个维度有缺失)。
- data = data.dropna(how='any')
-
- # 输出data的数据量和维度。
- data.shape
- (683,11)
如上面代码的输出所示,经过简单的处理之后,无缺失值的数据样本共有683条,特征包括细胞厚度、细胞大小、形状等9个维度,并且每个维度的特征均量化为1~10之间的数值进行表示。由于原始数据没有提供对于的测试样本用于评估模型性能,因此需要对带有标记的数据进行分割。通常情况25的据会作为测试集,其余75%的数据用于训练,如下面代码所示。
- # 使用sklearn.cross_valiation里的train_test_split模块用于分割数据。
- from sklearn.cross_validation import train_test_split
-
- # 随机采样25%的数据用于测试,剩下的75%用于构建训练集合。
- X_train, X_test, y_train, y_test = train_test_split(data[column_names[1:10]], data[column_names[10]], test_size=0.25, random_state=33)
-
- # 查验训练样本的数量和类别分布。
- y_train.value_counts()
- 344
- 168
- # 查验测试样本的数量和类别分布。
- y_test.value_counts()
- 100
- 7
综上,我们用于训练样本共有512条(344条良性肿瘤数据、168条恶性肿瘤数据),测试样本有171条(100条良性肿瘤数据、71条恶性肿瘤数据)。
下一篇开始使用逻辑斯蒂回归与随机梯度参数估计两种方法对上述处理后的训练数据进行学习,并且根据测试样本特征进行预测。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。