Python的Sklearn库的基本用法

Sklearn库是基于Python的第三方库,它包括机器学习开发的各个方面。

机器学习的开发基本分为六个步骤,1)获取数据,2)数据处理,3)特征工程,4)机器学习的算法训练(设计模型),5)模型评估,6)应用。

机器学习的算法一般分为两种:一种既有目标值又有特征值的算法称之为监督学习,另一种只有特征值的算法称之为无监督学习。而监督学习还可以继续细分为分类算法和回归算法。

1)获取数据⑤

Sklearn中获取数据集使用的包为Sklearn.datasets,之后可以接load_* 和fetch_*从Sklearn为初学者提供的数据集中获取数据。

其中,load获取的是小规模的数据集,fetch获取的是大规模的数据集。

  from sklearn.datasets import load_iris

  iris=load_iris()

  from sklearn.datasets import fetch_20newsgroups

  news=fetch_20newsgroups

  获取数据可以调用的方法:

    .data 特征数据数组

    .data.shape 特征值的数量

    .target 目标值数组

    .DESCR 数据描述

    .feature_names 特征值的名字

    .target_names 目标值的名字

  数据集的返回值:

    datasets.base.Bunch(继承自字典的格式)

    dict["key"]= values

    bunch.key=values

    可以获取对应的值

2)数据处理

  获取后的数据不是可以直接使用,机器学习的模型获取需要在训练集中进行训练得出模型,而后在测试集中进行测试,所以得到的数据集需要进行划分:

  Sklearn中提供可用于对数据集划分训练集和测试集的方法:

  Sklearn.model_selection.train_test_split()

    输入值x为数据集的特征值

    输入值y为数据集的目标值

    test_size 测试集的大小,一般为float

    random_state 随机数种子,不用的随机数种子会产生不同的随机采样结果。

    返回值的按照顺序为:训练集特征值,测试集特征值,训练集目标值,测试集目标值

    from sklearn.model_selection import train_test_split

    x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,random_state=22)

3)特征工程

  pandas:一个非常方便的读取数据并进行基本的处理的工具

  Sklearn:提供了很强大的特征处理的接口

特征提取:

  ①字典特征提取:Sklearn.feature_extraction.DictVectorizer

    DictVectorizer.fit_transform()

    输入值为字典或者包含字典的迭代器

    返回值为sparse矩阵,可以使用False改变返回值的类型为二维数组

    DictVectorizer.inverse_transform()

    输入值为数组或者sparse矩阵

    返回值为转换之前的数据格式

    DictVectorizer.get_feature_names()  

    返回值为类别的名称

  应用的场景:1.类别较多,将数据集的特征转化为字典类型,再利用DictVectorizer进行转换

        2.拿到的是字典类型的数据

  ②文本特征提取:Sklearn.feature_extraction.text.CountVectorizer(stop_words[])

    stop_words:停用词指的是指定的词不在做为文本特征提取的处理对象

    CountVectorizer.transfer.fit_transform()

    输入值为文本字典或者包含文本字符串的迭代器

    返回值为sparse矩阵,sparse矩阵使用toarray方法可以直接转换为二维数组

    CountVectorizer.inverse_transform()

    输入值为数组或者sparse矩阵

    返回值为转换之前的数据格式

    CountVectorizer.get_feature_names

    返回值为类别的名称

  中文分词可以使用jieba库,实现字符串的转换分词。

  TFIDF文本特征抽取,利用词在一个文章中使用频率与别的文章有很大区别,来实现特征的提取。

  TFIDF文本特征提取的方法:Sklearn.feature_extraction.text.TfidfVectorizer(stop_words[])

    TfidfVectorizer.transfer.fit_transform()

    输入值为文本字典或者包含文本字符串的迭代器

    返回值为sparse矩阵,sparse矩阵使用toarray方法可以直接转换为二维数组

    TfidfVectorizer.inverse_transform()

    输入值为数组或者sparse矩阵

    返回值为转换之前的数据格式

    TfidfVectorizer.get_feature_names

    返回值为类别的名称

特征预处理:

  ①归一化:sklearn.preprocessing.MinMaxScaler(feature_range=(0,1)....)

    feature_range=(0,1)数据处理后的范围

    MinMaxScaler.fit_traensform()

    输入值为numpy array格式的数据[n_samples,n_features]   [样本数,特征数]        

    返回值为形状相同的array

    缺点:这种方式会受到异常值的很大的影响。

  ②标准化:sklearn.preprocessing.StandardScaler

    不用指定范围会直接将数据处理到(0,1)的范围内,均值为0,标准差为1

    StandardScaler.fit_traensform()

    输入值为numpy array格式的数据[n_samples,n_features]   [样本数,特征数]        

    返回值为形状相同的array

    标准化的方法比较适合大数据的处理,在样本足够多的情况下比较稳定。

特征降维:

  指的是降低特征的个数,除去不相关的特征。

  Filter过滤式降维方法:

  ①方差过滤式降维:sklearn.feature_selection.VarianceThreshold(threshold=0.0)

    VarianceThreshold.fit_transform()

    输入值为numpy array格式的数据[n_samples,n_features]   [样本数,特征数]

    返回值为删除了低方差特征的特征后的数组   

  ②相关系数过滤式降维:

    相关系数的计算方法:scipy.stats.pearsonr(x,y)

    输入值为数据的特征的名称

  ③主成分分析(PCA)

  sklearn.decomposition.PCA(n_components=None)

  将数据进行处理,实现数据的降维。

    n_components:

    小数:保留百分之多少的信息

    整数:减少到剩余多少个信息

    PCA.fit_transform()

    输入值为numpy array格式的数据[n_samples,n_features]   [样本数,特征数]

    返回值为转换之后为指定维数的数组 

4)机器学习的算法训练(设计模型)

Sklearn中算法训练的基本使用:

  1.实例化一个estimator类

  2.estimator调用fit()方法,对送入的x_train,y_train值进行训练

  3.模型评估:y_predict=estimator.(x_test)

        y_predict==y_test

  或:accuracy=estimator.score(x_test,y_test)计算出准确率

分类算法:

  ①KNN算法:

  sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm=‘auto‘)

    n_neighbors为K值,algorithm默认为auto,一般不用设置,会选择最佳的算法

    优点:简单易于理解,易于实现

    缺点:懒惰算法,计算量大,内存的开销比较大,K值的选择不一定,需要找到最适合K值才能实现好的结果。

  ②网格搜索与交叉验证:

  sklearn.model_selection.GridSearchCV(estimator,param_grid=None,cv=None)

    返回值为estiamtor对象

    estimator:预估器对象

    param_grid:预估器参数{"n_neighbors":[1,3,5,7,9]}

    cv:进行交叉验证的折数

    可使用的方法:

    .fit()输入训练数据进行训练

    .score()输出训练的准确率

    最佳参数:best_param_

    最佳结果:best_score_

    最佳预估器 :best_estimator_

    交叉验证结果:cv_results_   

  ③朴素贝叶斯算法:认定各个特征之间是相互独立的。

   拉普拉斯平滑系数:分子加上α,分母加上mα(训练文档中特征词出现的个数,α值常为1)

   sklearn.naive_bayes.MultinomialNB(alpha=1.0)

     优点:分类效率稳定,对缺失数据不太敏感,算法也比较简单,常用于文本分类

     缺点:由于假设了特征之间的相互独立,如果所用的数据集中的特征之间存在关联,就会产生不合适的结果

  ④决策树:通过将特征进行排序,将影响更大的特征优先进行考虑,可以使用信息增益(信息熵-条件信息熵)作为判定的依据

   sklearn.tree.DecisionTreeClassifier(criterion=‘gini‘,max_depth=None,random_state=None)

    criterion:默认为‘gini‘,作为判定的依据,也可以改为‘entropy‘即为信息增益

    max_depth:树的深度大小(可以通过改变深度大小,减小决策树的过拟合)

    random_state:随机数种子

   决策树的可视化:

   sklearn.tree.export_graphviz(estimator,out_file="tree.dot ",feature_names)

    feature_names在输入之后才能显示在对应的位置

    优点:简单易理解,可以实现可视化

    缺点:没有设置深度,容易产生过拟合

  ⑤随机森林:训练集随机:随机有放回抽样;特征随机:从M个特征中,抽取m个特征,M>>m

   sklearn.ensemble.RandomForestClassifier(n_estimator=10,criterion=‘gini‘,max_depth=None,bootstrap=True,random_state=None,min_sample_lit=2)

    max_features="auto":默认为“auto”,每个决策树的最大特征数量,即为m值得选取方法。

      if"auto",求平方根;if"sqrt",求平方根;if"log2",求log2();if None,使用M值

    {"n_estimators":[120,200,300,500,800,1200],"max_depth":[5,8,10,15,30]}

   优点:具有很好的准确率,处理高维样本很有优势

回归算法:

  ①线性回归:将目标值和特征值当做线性关系,来实现拟合,得到回归算法。线性模型不等于线性关系,参数一致的非线性关系也可以称作线性模型。

    正规方程:sklearn.linear_model.LinearRegression(fit_intercept=True)

      fit_intercept:是否计算偏置

      LinearRegression.coef_:回归系数

      LinearRegression.intercept_:偏置

    梯度下降:sklearn.linear_model.SGDRegressor(loss="squared_loss",fit_intercept=True,learning_rate=‘invscaling‘,eta0=0.01)

      loss:损失类型,squared_loss最小二乘法的损失函数类型

      max_iter:迭代次数

      fit_intercept:是否计算偏置

      learning_rate:string,optional(指的是步长)

      ‘constant‘:eta=eta0

      ‘‘optional":eta=1.0/(alpha*(t+t0))[defult]

      ‘invscaling‘:eta=eta0/pow(t,power_t) power_t=0.25

      SGDRegressor.coef_:回归系数

      SGDRegressor.intercept_:偏置

    模型评估方法(均方误差评估):sklearn.metrics.mean_squared_error(y_true,y_pre)

      y_true:真实值

      y_pre:预测值

      return:浮点数结果

  ②岭回归:进行正则化处理时削弱某些特征值的作用,从而结果过拟合与欠拟合的问题。

      L1正则化:直接删除,L2正则化:削弱作用

      sklearn.linear_model.Ridge(alpha=1.0,fit_intercept=True,solver"auto",normolize=False)

      alpha:正则化力度,也叫λ取值0~1或者1~10

      solver:会根据数据集自动选择优化方法

      normalize:数据是否进标准化,如果设置为True就不用再前面进行标准化,实现效果是一样的

      Ridge.coef_:回归系数

      Ridge.intercept_:偏置

      Ridge方法相当于SGDRegressor(penalty=‘l2‘,loss="squared_loss"),但是后者缺少可SAG

  ③逻辑回归:sklearn.linear_model.LogisticRegression(solver="liblinear",penalty="l2"C=1.0)

      solver:优化求解方式

      penalty:正则化种类

      C:正则化力度

  模型评估(精确率和召回率):sklearn.metrics.classification_report(y_true,y_pre,lables[],targer_names=None)

      lables:指定类别对应的数字

      target_names:目标类别名称

      return:每个类别的精确率和召回率

  模型评估(ROC曲线和AUC指标):sklearn.metrics.roc_auc_score(y_true,y_score)    

      y_true=每个样本的真实类别,必须为0(反例),1(正例)

      y_score=预测得分,可以是正例的估计概率,置信值,分类器方法的返回值

      AUC只能用来评估二分类的问题,非常适合评价样本不均衡中的分类器性能

模型保存和加载:sklearn.externals. joblib

      保存模型:joblib.dump(estimator,"my_ridge.pkl")

      加载模型:estimator=joblib.load("my_ridge.pkl")

无监督学习:

  K-means算法:sklearn.cluster.KMeans(n_clusters=8)

      n_clusters:聚类中心的数量

      _lables_:默认标记的类型,可以和真实值进行比较

  模型评估:高内聚,低耦合(外部距离最大化,内部距离最小化)

      sklearn.metrics.silhouette_score(X,labels)轮廓系数

      X:特征值

      labels:被聚类标记的目标值

      

    

      

  

  

    

       

   

    

        

  

  

  

  

  

  

原文地址:https://www.cnblogs.com/zx931880423/p/11543256.html

时间: 2024-10-17 00:44:35

Python的Sklearn库的基本用法的相关文章

python爬虫---urllib库的基本用法

urllib是python自带的请求库,各种功能相比较之下也是比较完备的,urllib库包含了一下四个模块: urllib.request   请求模块 urllib.error   异常处理模块 urllib.parse   url解析模块 urllib.robotparse    robots.txt解析模块 下面是一些urllib库的使用方法. 使用urllib.request import urllib.request response = urllib.request.urlopen(

Python爬虫Urllib库的高级用法

设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览器,调试浏览器F12,我用的是Chrome,打开网络监听,示意如下,比如某网站,点登录之后,我们会发现登陆之后界面都变化 了,出现一个新的界面,实质上这个页面包含了许许多多的内容,这些内容也不是一次性就加载完成的,实质上是执行了好多次请求,一般是首先请求HTML文 件,然后加载JS,CSS 等等,经过多

Python初探——sklearn库中数据预处理函数fit_transform()和transform()的区别

敲<Python机器学习及实践>上的code的时候,对于数据预处理中涉及到的fit_transform()函数和transform()函数之间的区别很模糊,查阅了很多资料,这里整理一下: # 从sklearn.preprocessing导入StandardScaler from sklearn.preprocessing import StandardScaler # 标准化数据,保证每个维度的特征数据方差为1,均值为0,使得预测结果不会被某些维度过大的特征值而主导 ss = Standard

Python爬虫入门之Urllib库的高级用法

1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览器,调试浏览器F12,我用的是Chrome,打开网络监听,示意如下,比如知乎,点登录之后,我们会发现登陆之后界面都变化了,出现一个新的界面,实质上这个页面包含了许许多多的内容,这些内容也不是一次性就加载完成的,实质上是执行了好多次请求,一般是首先请求HTML文件,然后加载JS,CSS 等等,经过多次

转 Python爬虫入门四之Urllib库的高级用法

静觅 » Python爬虫入门四之Urllib库的高级用法 1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览器,调试浏览器F12,我用的是Chrome,打开网络监听,示意如下,比如知乎,点登录之后,我们会发现登陆之后界面都变化了,出现一个新的界面,实质上这个页面包含了许许多多的内容,这些内容也不是一次性就加载完成的,实质上是执行了好多次请求,一般

Python模板库Mako的用法

Mako是一个高性能的Python模板库,它的语法和API借鉴了很多其他的模板库,如Django.Jinja2等等. 基本用法 创建模板并渲染它的最基本的方法是使用 Template 类: from mako.template import Template t = Template('hello world!') print t.render() 传给 Template 的文本参数被编译为一个Python模块.模块包含一个 render_body() 函数,它产生模板的输出.调用 render

python beautiful soup库的超详细用法

原文地址https://blog.csdn.net/love666666shen/article/details/77512353 参考文章https://cuiqingcai.com/1319.html 1. Beautiful Soup 简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索.修改分析树等功能.它是一个工具箱,通过解析文档为用户提供需要

Python爬虫利器:Selenium的用法

本文和大家分享的主要是python 爬虫 利器Selenium的相关内容,一起来看看吧,希望对大家 学习python爬虫有所帮助. Selenium  是什么?一句话,自动化测试工具.它支持各种浏览器,包括  Chrome , Safari , Firefox 等主流界面式浏览器,如果你在这些浏览器里面安装一个  Selenium  的插件,那么便可以方便地实现 Web界面的测试.换句话说叫  Selenium  支持这些浏览器驱动.话说回来, PhantomJS 不也是一个浏览器吗,那么  S

sklearn库的安装

sklearn库 sklearn是scikit-learn的简称,是一个基于Python的第三方模块.sklearn库集成了一些常用的机器学习方法,在进行机器学习任务时,并不需要实现算法,只需要简单的调用sklearn库中提供的模块就能完成大多数的机器学习任务. sklearn库是在Numpy.Scipy和matplotlib的基础上开发而成的,因此在介绍sklearn的安装前,需要先安装这些依赖库. Numpy库:Numpy(Numerical Python的缩写)是一个开源的Python科学