十分钟上手sklearn 安装,获取数据,数据预处理

更多干货就在我的个人博客 http://blackblog.tech 欢迎关注!

sklearn是机器学习中一个常用的python第三方模块,对常用的机器学习算法进行了封装
其中包括:
1.分类(Classification)
2.回归(Regression)
3.聚类(Clustering)
4.数据降维(Dimensionality reduction)
5.常用模型(Model selection)
6.数据预处理(Preprocessing)
本文将从sklearn的安装开始讲解,由浅入深,逐步上手sklearn。

sklearn官网:http://scikit-learn.org/stable/index.html
sklearn API:http://scikit-learn.org/stable/modules/classes.html#module-sklearn.preprocessing

skleran安装

sklearn的目前版本是0.19.1
依赖包:
Python (>=2.6或>=3.3)
NumPy(>=1.6.1)
SciPy(>=0.9)

使用pip安装,terminal直接执行即可

pip install -U scikit-learn

使用Anaconda安装,推荐Anaconda,因为里面已经内置了NumPy,SciPy等常用工具

conda install scikit-learn

安装完成后可以在python中检查一下版本,import sklearn不报错,则表示安装成功

>>import sklearn
>>sklearn.__version__
'0.19.1'

获取数据

机器学习算法往往需要大量的数据,在skleran中获取数据通常采用两种方式,一种是使用自带的数据集,另一种是创建数据集

导入数据集

sklearn自带了很多数据集,可以用来对算法进行测试分析,免去了自己再去找数据集的烦恼
其中包括:
鸢尾花数据集:load_iris()
手写数字数据集:load_digitals()
糖尿病数据集:load_diabetes()
乳腺癌数据集:load_breast_cancer()
波士顿房价数据集:load_boston()
体能训练数据集:load_linnerud()

这里以鸢尾花数据集为例导入数据集

#导入sklearn的数据集
import sklearn.datasets as sk_datasets
iris = sk_datasets.load_iris()
iris_X = iris.data #导入数据
iris_y = iris.target #导入标签

创建数据集

使用skleran的样本生成器(samples generator)可以创建数据,sklearn.datasets.samples_generator中包含了大量创建样本数据的方法。

这里以分类问题创建样本数据

import sklearn.datasets.samples_generator as sk_sample_generator
X,y=sk_sample_generator.make_classification(n_samples=6,n_features=5,n_informative=2,n_redundant=3,n_classes=2,n_clusters_per_class=2,scale=1,random_state=20)
for x_,y_ in zip(X,y):
    print(y_,end=": ")
    print(x_)

参数说明:
n_features :特征个数= n_informative() + n_redundant + n_repeated
n_informative:多信息特征的个数
n_redundant:冗余信息,informative特征的随机线性组合
n_repeated :重复信息,随机提取n_informative和n_redundant 特征
n_classes:分类类别
n_clusters_per_class :某一个类别是由几个cluster构成的
random_state:随机种子,使得实验可重复
n_classes*n_clusters_per_class 要小于或等于 2^n_informative

打印结果:

0: [ 0.64459602  0.92767918 -1.32091378 -1.25725859 -0.74386837]
0: [ 1.66098845  2.22206181 -2.86249859 -3.28323172 -1.62389676]
0: [ 0.27019475 -0.12572907  1.1003977  -0.6600737   0.58334745]
1: [-0.77182836 -1.03692724  1.34422289  1.52452016  0.76221055]
1: [-0.1407289   0.32675611 -1.41296696  0.4113583  -0.75833145]
1: [-0.76656634 -0.35589955 -0.83132182  1.68841011 -0.4153836 ]

数据集的划分

机器学习的过程正往往需要对数据集进行划分,常分为训练集,测试集。sklearn中的model_selection为我们提供了划分数据集的方法。
以鸢尾花数据集为例进行划分

import sklearn.model_selection as sk_model_selection
X_train,X_test,y_train,y_test = sk_model_selection.train_test_split(iris_X,iris_y,train_size=0.3,random_state=20)

参数说明:
arrays:样本数组,包含特征向量和标签
test_size:
  float-获得多大比重的测试样本 (默认:0.25)
  int - 获得多少个测试样本
train_size: 同test_size
random_state:int - 随机种子(种子固定,实验可复现)
shuffle - 是否在分割之前对数据进行洗牌(默认True)

后面我们训练模型使用的数据集都基于此

数据预处理

我们为什么要进行数据预处理?
通常,真实生活中,我们获得的数据中往往存在很多的无用信息,甚至存在错误信息,而机器学习中有一句话叫做"Garbage in,Garbage out",数据的健康程度对于算法结果的影响极大。数据预处理就是让那些冗余混乱的源数据变得能满足其应用要求。
当然,仅仅是数据预处理的方法就可以写好几千字的文章了,在这里只谈及几个基础的数据预处理的方法。
skleran中为我们提供了一个数据预处理的package:preprocessing,我们直接导入即可

import sklearn.preprocessing as sk_preprocessing

下面的例子我们使用:[[1, -1, 2], [0, 2, -1], [0, 1, -2]]做为初始数据。

数据的归一化

基于mean和std的标准化

scaler = sk_preprocessing.StandardScaler().fit(X)
new_X = scaler.transform(X)
print('基于mean和std的标准化:',new_X)

打印结果:

基于mean和std的标准化:
 [[ 1.41421356 -1.33630621  1.37281295]
 [-0.70710678  1.06904497 -0.39223227]
 [-0.70710678  0.26726124 -0.98058068]]

规范化到一定区间内 feature_range为数据规范化的范围

scaler = sk_preprocessing.MinMaxScaler(feature_range=(0,1)).fit(X)
new_X=scaler.transform(X)
print('规范化到一定区间内',new_X)

打印结果:

规范化到一定区间内
 [[1.          0.          1.        ]
 [ 0.          1.          0.25      ]
 [ 0.          0.66666667  0.        ]]

数据的正则化

首先求出样本的p-范数,然后该样本的所有元素都要除以该范数,这样最终使得每个样本的范数都为1

new_X = sk_preprocessing.normalize(X,norm='l2')
print('求二范数',new_X)

打印结果:

规范化到一定区间内
 [[0.40824829 -0.40824829  0.81649658]
 [ 0.          0.89442719 -0.4472136 ]
 [ 0.          0.4472136  -0.89442719]]

小结

本文介绍了sklearn的安装,sklearn导入数据集,创建数据集的基本方法,对数据预处理的常用方法进行了介绍。
下一篇,将重点讲解如何使用sklearn进行特征提取,使用sklearn实现机器学习经典算法,模型的保存等内容。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

  • Machine Learning in Python (Scikit-learn)-(No.1) 作者:范淼(人人...
    hzyido阅读 6,142评论 2 13
  • 常用的数据预处理方式 Standardization, or mean removal and variance ...
    cnkai阅读 2,179评论 0 5
  • 牧羊少年奇幻之旅 天命 观察生活 预兆 宇宙的语言 万物皆一物 天命就是你一直期望去做的事情。人一旦步入青年时期,...
    桐花馆coffeehouse阅读 211评论 0 0
  • 记忆里 他气宇轩扬 风度翩翩 玉树临风 英俊潇洒 再见他 他变得很普通 不是他帅过 而是你爱过 晚上下班去超市买东...
    来自火星的太阳女侠阅读 525评论 0 0
  • 如果你看到眼前的一片漆黑 没关系 黑夜漫漫总会过去 黎明的曙光终将突破眼前的黑暗 为你照亮一方天地 如果你经过的满...
    溧云阅读 307评论 3 3