机器学习scikit-learn(一)
来源:互联网 发布:克苏鲁跑团软件 编辑:程序博客网 时间:2024/05/02 00:03
机器学习scikit-learn
在数据分析过程中,我们经常会碰到各种各样的问题。如何获取外部数据?如何处理脏数据?如何处理缺失值?若有许多特征,我们减少特征?建立各种模型中算法的细节?到最后,面对多种模型,我们该如何选择?这些问题,都将在此文中得到解答。此文分为五个部分:
- 建立模型的之前的工作
- 建立线性模型
- 聚类分析
- 分类
- 建立模型之后的工作
建立模型前的工作
如何从外界获取数据?
获取外界数据有很多种方法,有直接下载、API和爬虫等,这里只介绍scikit-learn内置的数据,这些数据用来熟悉各种算法。
from sklearn import datasets #sklearn有数据集的模块
其中的数据有两类,一类是小数据,直接包含在模块之中;另一类是大数据,需要你自己下载,sklearn提供函数下载。
boston = datasets.load_boston()#从数据集中载入波斯顿数据print boston.DESCR #可以查看数据的描述housing = datasets.fetch_california_housing() #从网上下载大数据
这些数据被载入时,不是Numpy的array格式,而是一个叫Bunch的格式,Bunch是一个特殊的字典,字典中的Keys作为数据的属性。
X,y = boston.data,boston.target #X为特征数据,有y是预测数据
UCI Machine Learning Repository其中有更多的数据集用来实验算法,我们可以尽情的利用这些数据集,而不用担心,自己学习了各种算法,而没有数据集去实现!
为简单的分析生成样本数据
datasets模块中有一个make_函数,可以生成一些简单的数据,以便于分析。
import sklearn.datasets as d #简写为了方便reg_data = d.make_regression() #生成回归数据complex_reg_data = d.make_regression(1000,10,5,2,1.0) #生成复杂点的回归数据-1000*10的矩阵,5个有效变量,2个目标变量,1.0的偏差classification_set = d.make_classification(weight=[0.1]) #生成分类数据blobs = d.make_blobs() #生成聚类数据
datasets模块中还有更多的函数去生成各种各样的数据,可以看一看,等需要的时候再用。
标准化数据
缩放数据是非常重要的步骤,许多机器学习算法,在数据有不同的尺度的情况下根本无法发挥用处。比如利用支持向量机进行预测,当你的一个特征变量是0-1,而另一个变量的范围却是0-10000,这时支持向量机的表现会非常差,以至于产生一个错误的模型。我们常用的标准化的方法是正态化,z-scores。scikit-learn有一个preprocessing模块,利用这个模块中的scale、StandardScaler和MinMaxScaler我们就可以进行缩放数据的操作。
from sklearn import preprocessingX_2 = preprocessing.scale(X) #缩放波斯顿特征数据,将标准差都变为1.my_scaler = preprocessing.StandardScaler() #与以上相同my_scaler.fit(X)my_scaler.transform(X)#也可以缩放范围my_minmax_scaler = preprocessing.MinMaxScaler() #缩放范围,默认为[0,1]my_minmax_scaler.fit(x)my_minmax_scaler.transform(x)my_odd_scaler = preprocessing.MinMaxScaler(feature_range = (-5,5)) #缩放范围改为[-5,5]
通过阈值创建二元变量
有一些变量是连续变量,我们想把它变成二元变量,利于分析。就比如决策树中,我们有一变量是工资,为连续变量,而连续变量不利于决策树建模,于是利用阈值将其分为二元变量,高工资和低工资。这个方法在preprocessing.binarize和preprocessing.Binarizer都可实现。
new_target=preprocessing.binarize(boston.target,threshold=boston.target.mean) #把波斯顿数据目标变量变成二元变量,阈值是均值,大于均值为1bin = preprocessing.Binarizer(boston.target.mean())new_target = bin.fit_transform(boston.target)
处理分类变量
分类变量能给我们提供更多的信息,有时候却非常麻烦,因为它可能是文字的,对于文字,我们根本无法用算法进行分析。我们就需要去处理分类变量,将分类变量变成二元变量。例如分类变量红色、绿色、黑色,我们根据其是否为红色、绿色、黑色,转化为二元变量。在sklearn里有OneHotEncoder、DictVectorizer和patsy用来处理分类变量。
from sklearn import preprocessingtext_encoder = preprocessing.OneHotEncoder()text_encoder.fit_transform(iris.target).toarray()from sklearn.feature_extraction import DictVectorizerdv = DictVectorzier()my_dict = [{'species':iris.target_names[i]} for i in y]dv.fit_transform(my_dict).toarray()
处理缺失值
如何处理缺失值在实践中非常重要,幸运的是,我们有很多方法去处理缺失值。对于缺失值,我们可以直接去除这个样本,如果你的样本足够多的话。但是一般我们都是用平均值、中位数和众数去代替。其中实现的方法可以利用sklearn中的Imputer来进行处理。
from sklearn import preprocessingimpute = preprocessing.Imputer() #默认为平均值impute.fit_transform(X)
流水线-多步骤预处理
当你的预处理步骤较多时,使用流水线比较方便,更有利于以后的交叉验证。方法实现是利用pipeline.当我们不是用pipeline的预处理步骤是:
from sklearn import preprocessingimpute = preprocessing.Imputer()scaler = preprocessing.StandarScaler()X_imputed = impute.fit_transform(X)X_imp_and_scaled = scaler.fit_transform(X)
而当我们使用pipeline时:
from sklearn import pipelinepipe = pipeline.Pipeline([('impute',impute),('scaler',scaler)])new_x = pipe.fit_transform(X)
降维
PCA是利用线性转化把数据转换到特征空间中,得到前几个能代表最多信息的主成分,从而达到降维的目的,其实现方法是decompositin.PCA.
from sklearn import decompositionpca = decomposition.PCA()pca.fit_transform(X)pca.explained_variance_ratio_
因子分析是另一种降维方法,其假定变量中有一些公共因子,公共因子的数目是少于变量的,这样就达到降维的目的,其实现方法是decomposition.FactorAnalysis.
from sklearn import decompositionfa = decomposition.FacorAnalysis()fa.fit_transform(X)
核PCA是先利用核技巧把数据投射到高维空间,然后利用PCA进行降维。这种方法对非线性数据进行降维。核函数有:polynomial、rbf、sigmoid、cosine、precomputed
kpca = decomposition.KernelPCA(kernel='cosine',n_components=1)X_transformed = kpca.fit_transform(X)
截断SVD,截断奇异值分解,是另一种降维方法,其可以用在稀疏矩阵而PCA不能。
from sklearn.decomposition import TruncatedSVDsvd = TruncatedSVD(2)X_transformed = svd.fit_transform(X)
到此学习了如何获取数据,如何对数据进行预处理(标准化、缺失值和降维),这些都是非常基础的知识,也是非常重要的知识。下节我们会试试去建立简单模型——线性模型。
参考:《scikit-learn cookbook》by Trent Hauck
- 机器学习scikit-learn(一)
- 机器学习库scikit-learn简介(一)
- 机器学习实战(一)kNN调用scikit-learn库函数
- scikit-learn 机器学习
- Scikit-Learn机器学习介绍(中文翻译)
- 机器学习 scikit-learn(1)
- 机器学习 scikit-learn(2)
- scikit-learn机器学习模块(上)
- scikit-learn机器学习模块(下)
- 机器学习scikit-learn入门教程
- 机器学习 scikit-learn 图谱
- 机器学习 scikit-learn安装
- scikit-learn 机器学习介绍
- 机器学习scikit-learn入门教程
- ]scikit-learn进行机器学习
- scikit-learn机器学习库
- 机器学习scikit-learn入门教程
- scikit-learn Preprocessing学习笔记(一)
- HDU5385 图、贪心
- JavaMelody JavaWeb下的性能监控组件
- oc关于类方法和对象方法的区别
- 【Jboss】热部署
- Poj 1061 青蛙的约会
- 机器学习scikit-learn(一)
- Java Servlet学习【1】编写Servlet程序,配置web.xml,使用免安装版tomcat
- LeetCode Number of 1 Bits 刷题 OJ
- Eclipse 安装插件 几乎就这么几个步骤,包括svn安装
- cocos2dx新项目的创建
- 【NOI2015】【bzoj4198】【荷马史诗】【k叉哈夫曼树】【贪心】
- 消息中间件原理及JMS简介之一
- 杭州电子科技大学acm--2003
- 百度编辑工具单独上传图片、视频