Sklearn Reading1

Introduce

此处仅给出ML基本原则 以及 Sklearn的基本流程
学习 实际上考虑的是针对数据,通过对数据已知部分(实际中往往是数据集的采样)的思考从而指导进一步地对数据未知部分的预测和理解。又由于对数据采样的点往往并非单个数值,其往往含有多元条目–> 这采样数据称多元数据,其中含有的条目称为数据的特征。例如:通过在1000个人中拉出来100个人进行分析,针对每个人研究身高 性别 体重(这些是特征),将这些研究整合在一起形成了对一个人的描述(多元数据),通过对这100个人(采样)进行研究 来初步确定其余900个人所应该满足的人类特征(性别 体重 等)。

内容组织:
1. 监督学习: 数据中含有我们所关注的附加属性,来指导学习过程。sklearn有专门的讲解区
研究两类问题:
1.1. 分类问题。采样来自多个类别形成数据集,这些数据有相应的类别标签,对这些数据进行分析从而可以预测无标签数据类别。其中一个例子是对于手写体的识别,我们需要在已知手写体向量中学到知识从而对于未知输入向量(手写体的量化)进行所属类别的识别。
1.2. 回归问题。最终输出是连续变量的组合,即称回归。例如:预测三文鱼长度,这个长度是年龄和重量的函数。
2. 非监督学习。训练数据由一系列无目标标签的输入向量组成。这类问题的目的或许在于集中数据集中相似的部分–>聚类,或许在于根据输入空间来决定数据的分布–>密度估计,又或者是将数据从高纬空间映射到2,3维的空间中以利用可视化。这部分内容 Sklearn中做了详尽的描述

训练和测试
机器学习本质上还是学习的一种,其拥有和学习相同的概念。即学习到数据集的某些性质并将其应用到新数据中。但是和学习一样,我们需要不断地测试。在ML中一个非常活跃的题目就是如何将现有的数据分割成两部分,一部分称为训练集 用于取得数据特性(规律),另一部分称为测试集以测试取得特性的普适性。
样例数据集 :在sklearn中自带了多数据集可用于初步的学习。分别为 iris,digits, 和可用于回归的boston房价数据集。
其加载也比较容易:
load_boston() boston house-prices dataset (regression).
load_iris() the iris dataset (classification).
load_diabetes() the diabetes dataset (regression).
load_digits([n_class]) the digits dataset (classification).
load_linnerud() the linnerud dataset (multivariate regression).

from sklearn import [datasets](http://scikit-learn.org/stable/datasets/index.html#datasets)

iris = datasets.load_iris()
digits = datasets.load_digits()
# note: 都是 array 形式
iris.data() # 访问数据
iris.target()   # 访问对应标签

用这样的API得到的数据集都是 array 形式,其中不乏(m,n,p)这种多维数组形式(例如手写字体图像数据 –> 每个数据都是8*8的矩阵),在使用前需要认清数据形式,并进行相应的变换,如为之后学习使用(sklearn学习器标准输入是单维)进行矩阵变换

学习和预测
有了数据和特征,下一步的学习就成为可能。对数据进行适当处理后就可以使用sklearn中相应模块进行学习。学习目标在于根据已知发现规律,为之后的预测做出指导。以手写字符为例,在学习了大量已知内容手写字体后,我们希望对于机器可以自行判断之后手写字体对应的类别(0~9)。
以上分析确定我们需要处理的是一个分类问题,那么就需要加载分类学习器。这里以经典的SVM(support vector classification)为例。

from sklearn import svm # 加载分类器

clf = svm.SVC(gamma=0.001, C=100.) # 设置参数等生产分类器
# note: 学习器参数的设置并非随机,而是需要根据一系列方法进行判定,流行的就是反复实验,根据学习效果进行选择,典型的有: grid search,cross validation。(请自行查找 sklearn 对应模块了解)。

# 得到学习数据(同时需要确定 训练数据和测试数据 但是此处在于讲流程 就不再细说 sklearn 中相应模块 非常方便)
# 实际情况中,样本的处理和划分也很有挑战性,正负样本的比例失衡牵扯的样本均衡问题也往往会困扰实践者
# 下一步当然是 为学习器输入数据 使其进行学习(这里的学习 其实就是学习器根据学习样例 不断调整参数 从而满足相应的误差函数设置--> 误差函数的设置也是很多学习器的区分关键)
# fit 是skleann中学习器普遍使用的学习函数,其参数就是对应样本以及标签(分类问题),其行为就是根据输入进行学习器的训练 --> 其返回的就是学习完毕的学习器, 本例中即为 clf 后可用于更多操作
clf.fit(digits.data[:-1], digits.target[:-1])
# 训练完毕 则需要在测试集上进行相应的测试, 普遍使用的为 predict函数,意如其名。
clf.predict(digits.data[-1:])
# 预测输出为对于predict输入实例的预测结果。

觉得不过瘾 请看 Recognizing hand-written digits.

模型复用
显然在实际使用中,训练完毕一个模型意味着要反复使用,否则下次使用再训练显得冗余。那么我们需要将训练完毕的模型保留起来。

import pickle # python中模块,自查
# 可以存储为文件形式 等
s = pickle.dumps(clf) # 将之前训练好的clf存储
clf2 = pickle.loads(s) # 加载存储模块
clf2.predict(X[0:1])    # 使用

当然还有另外一种存储模式:joblib,这里没有必要过多探究,记住pickle即可,其他的用到了再看。

约定
为了保证学习器运行的精确,sklearn设置了一些约定(当然你完全可以无视)。
1. 类型 输入数据都被默认为 float64 但是显然 对于回归而言 其所谓target也被转换为 float64。对于分类的target 其将被保持,这意味着你用怎样的targrt 作为分类学习器fit()函数的参数,最终预测的时候返回的就是怎样的target。
2. 学习 学习器的fit()函数有时效性,意思是本次的fit()将覆盖之前的fit()操作以生成新的学习器,同时我们可以使用set_params()来为学习器设置参数。

<未完 其其中内容有待更正和补充 谢>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值