使用sk-learn解决二分类问题

29. 11 月 2017 机器学习 0

sk-learn是一个python的机器学习工具库,最早基于scipy发展而来,可以与pandas、matplotlib、numpy等库无缝结合。本文主要介绍上手用sk-learn做二分类预测的方法和一些使用过程中的心得。按机器学习的步骤,我把文章分为三个部分:数据集准备、模型训练、模型检验。

数据集准备

数据来源

首先要明确我们要解决的是什么问题,输入输出分别是什么。标注数据可以来源于生产环境中的真实数据,也可以在网上下载的一些数据,比较常见的有iris,mnist,还有一些竞赛数据,处于学习目的都可以拉下来用。为了简单,我们假设数据随机生成,每个数据有两个feature(两维),用n行2列的数组表示。

这里要插一句:sk-learn的输入支持多种格式,无论是数组还是np.arrays都可以

数据组成

二分类问题中正负样本的比例是一个仁者见仁智者见智的问题,通常来说使正负样本数相同、或与真实数据比例保持一致就可以。但是如果某一方数据较少,或者特征较弱,则可以适当增加比例。

但是如果某一方数据极少,则是另一个问题了(class imbalance),可以通过采样方法平衡,甚至通过一些半监督方法去搞 (出门右转搜索TSVM或者一些generate model,我暂时还不会)

标准化和归一化

标准化是一种将所有数据无量纲化,映射到相同的区间内。通常方法是将原数值减去平均值后除以标准差。标准化后的数据都聚集在0附近,方差为1(z-score)。sk-learn提供了标准化函数:

归一化作用是将数值映射到[0,1]区间内,公式是 归一值=(原值-min)/(max-min) 。sk-learn也提供了归一化函数:

通常需要进行梯度优化的机器学习算法需要标准化和归一化,如LR、nn等,决策树之类的不用做(是基于信息增益的)。

shuffle以及训练集、测试集划分

shuffle是指打乱数据的原有顺序,不多说了。

为了验证模型效果,通常会使用70~80%的数据用来训练模型,剩下的数据用于验证原有模型,这样可以了解模型的泛化能力。当然也可以使用k-fold等方法做多轮交叉验证。

下面这个函数提供了shuffle和切分的功能:

 

模型训练

在数据准备阶段我们已经得到了x_train, x_test, y_train, t_test,接下来这部分我们需要用x_train和y_train来训练我们的模型。

sk-learn提供了很多种易(bu)于(yong)上(can)手(shu)的机器学习类可以使用,这些类都实现了fit()、predict()等方法,用起来非常简单,也非常容易构建多种不同方法的机器学习模型和混合模型。

例子 — Logistic回归