Python机器学习工具scikit-learn的使用笔记

scikit-learn 是基于 Python 语言的机器学习工具

  • 简单高效的数据挖掘和数据分析工具
  • 可供大家在各种环境中重复使用
  • 建立在 NumPy ,SciPy 和 matplotlib 上
  • 开源,可商业使用 - BSD许可证

sklearn 中文文档:http://www.scikitlearn.com.cn/

官方文档:http://scikit-learn.org/stable/

sklearn官方文档的类容和结构如下:

sklearn是基于numpy和scipy的一个机器学习算法库,设计的非常优雅,它让我们能够使用同样的接口来实现所有不同的算法调用。

sklearn库的四大机器学习算法:分类,回归,聚类,降维。其中:

  • 常用的回归:线性、决策树、SVM、KNN ;集成回归:随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees
  • 常用的分类:线性、决策树、SVM、KNN,朴素贝叶斯;集成分类:随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees
  • 常用聚类:k均值(K-means)、层次聚类(Hierarchical clustering)、DBSCAN
  • 常用降维:LinearDiscriminantAnalysis、PCA

还包含了特征提取、数据处理和模型评估三大模块。
     同时sklearn内置了大量数据集,节省了获取和整理数据集的时间。 
使用sklearn进行机器学习的步骤一般分为:导入模块-创建数据-建立模型-训练-预测五步。
以下为代码笔记

一、数据获取
*****************
"""

##1.1 导入sklearn数据集
from sklearn import datasets

iris = datasets.load.iris() #导入数据集
X = iris.data  #获得其特征向量
y = iris.target # 获得样本label

##1.2 创建数据集
from sklearn.datasets.samples_generator import make_classification

X, y = make_classification(n_samples=6, n_features=5, n_informative=2,
  n_redundant=2, n_classes=2, n_clusters_per_class=2, scale=1.0,
  random_state=20)

# n_samples:指定样本数
# n_features:指定特征数
# n_classes:指定几分类
# random_state:随机种子,使得随机状可重

# 查看数据集
for x_,y_ in zip(X,y):
  print(y_,end=': ')
  print(x_)
"""
0: [-0.6600737 -0.0558978  0.82286793 1.1003977 -0.93493796]
1: [ 0.4113583  0.06249216 -0.90760075 -1.41296696 2.059838 ]
1: [ 1.52452016 -0.01867812 0.20900899 1.34422289 -1.61299022]
0: [-1.25725859 0.02347952 -0.28764782 -1.32091378 -0.88549315]
0: [-3.28323172 0.03899168 -0.43251277 -2.86249859 -1.10457948]
1: [ 1.68841011 0.06754955 -1.02805579 -0.83132182 0.93286635]
"""

"""
*****************
二、数据预处理
*****************
"""
from sklearn import preprocessing

##2.1 数据归一化
data = [[0, 0], [0, 0], [1, 1], [1, 1]]
# 1. 基于mean和std的标准化
scaler = preprocessing.StandardScaler().fit(train_data)
scaler.transform(train_data)
scaler.transform(test_data)

# 2. 将每个特征值归一化到一个固定范围
scaler = preprocessing.MinMaxScaler(feature_range=(0, 1)).fit(train_data)
scaler.transform(train_data)
scaler.transform(test_data)
#feature_range: 定义归一化范围,注用()括起来

#2.2 正则化
X = [[ 1., -1., 2.],
  [ 2., 0., 0.],
  [ 0., 1., -1.]]
X_normalized = preprocessing.normalize(X, norm='l2')

print(X_normalized)
"""
array([[ 0.40..., -0.40..., 0.81...],
    [ 1. ..., 0. ..., 0. ...],
    [ 0. ..., 0.70..., -0.70...]])
"""

## 2.3 One-Hot编码
data = [[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]
encoder = preprocessing.OneHotEncoder().fit(data)
enc.transform(data).toarray()

"""
*****************
三、数据集拆分
*****************
"""
# 作用:将数据集划分为 训练集和测试集
# 格式:train_test_split(*arrays, **options)
from sklearn.mode_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
"""
参数
---
arrays:样本数组,包含特征向量和标签

test_size:
  float-获得多大比重的测试样本 (默认:0.25)
  int - 获得多少个测试样本

train_size: 同test_size

random_state:
  int - 随机种子(种子固定,实验可复现)
  
shuffle - 是否在分割之前对数据进行洗牌(默认True)

返回
---
分割后的列表,长度=2*len(arrays),
  (train-test split)
"""

"""
*****************
四、定义模型
*****************
"""
## 模型常用属性和工鞥呢
# 拟合模型
model.fit(X_train, y_train)
# 模型预测
model.predict(X_test)

# 获得这个模型的参数
model.get_params()
# 为模型进行打分
model.score(data_X, data_y) # 线性回归:R square; 分类问题: acc

## 4.1 线性回归
from sklearn.linear_model import LinearRegression
# 定义线性回归模型
model = LinearRegression(fit_intercept=True, normalize=False,
  copy_X=True, n_jobs=1)
"""
参数
---
  fit_intercept:是否计算截距。False-模型没有截距
  normalize: 当fit_intercept设置为False时,该参数将被忽略。 如果为真,则回归前的回归系数X将通过减去平均值并除以l2-范数而归一化。
   n_jobs:指定线程数
"""

## 4.2 逻辑回归
from sklearn.linear_model import LogisticRegression
# 定义逻辑回归模型
model = LogisticRegression(penalty='l2', dual=False, tol=0.0001, C=1.0,
  fit_intercept=True, intercept_scaling=1, class_weight=None,
  random_state=None, solver='liblinear', max_iter=100, multi_class='ovr',
  verbose=0, warm_start=False, n_jobs=1)

"""参数
---
  penalty:使用指定正则化项(默认:l2)
  dual: n_samples > n_features取False(默认)
  C:正则化强度的反,值越小正则化强度越大
  n_jobs: 指定线程数
  random_state:随机数生成器
  fit_intercept: 是否需要常量
"""

## 4.3 朴素贝叶斯算法NB
from sklearn import naive_bayes
model = naive_bayes.GaussianNB() # 高斯贝叶斯
model = naive_bayes.MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)
model = naive_bayes.BernoulliNB(alpha=1.0, binarize=0.0, fit_prior=True, class_prior=None)
"""
文本分类问题常用MultinomialNB
参数
---
  alpha:平滑参数
  fit_prior:是否要学习类的先验概率;false-使用统一的先验概率
  class_prior: 是否指定类的先验概率;若指定则不能根据参数调整
  binarize: 二值化的阈值,若为None,则假设输入由二进制向量组成
"""

## 4.4 决策树DT
from sklearn import tree
model = tree.DecisionTreeClassifier(criterion='gini', max_depth=None,
  min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0,
  max_features=None, random_state=None, max_leaf_nodes=None,
  min_impurity_decrease=0.0, min_impurity_split=None,
   class_weight=None, presort=False)
"""参数
---
  criterion :特征选择准则gini/entropy
  max_depth:树的最大深度,None-尽量下分
  min_samples_split:分裂内部节点,所需要的最小样本树
  min_samples_leaf:叶子节点所需要的最小样本数
  max_features: 寻找最优分割点时的最大特征数
  max_leaf_nodes:优先增长到最大叶子节点数
  min_impurity_decrease:如果这种分离导致杂质的减少大于或等于这个值,则节点将被拆分。
"""

## 4.5 支持向量机
from sklearn.svm import SVC
model = SVC(C=1.0, kernel='rbf', gamma='auto')
"""参数
---
  C:误差项的惩罚参数C
  gamma: 核相关系数。浮点数,If gamma is ‘auto' then 1/n_features will be used instead.
"""

## 4.6 k近邻算法 KNN
from sklearn import neighbors
#定义kNN分类模型
model = neighbors.KNeighborsClassifier(n_neighbors=5, n_jobs=1) # 分类
model = neighbors.KNeighborsRegressor(n_neighbors=5, n_jobs=1) # 回归
"""参数
---
  n_neighbors: 使用邻居的数目
  n_jobs:并行任务数
"""

## 4.7 多层感知机
from sklearn.neural_network import MLPClassifier
# 定义多层感知机分类算法
model = MLPClassifier(activation='relu', solver='adam', alpha=0.0001)
"""参数
---
  hidden_layer_sizes: 元祖
  activation:激活函数
  solver :优化算法{‘lbfgs', ‘sgd', ‘adam'}
  alpha:L2惩罚(正则化项)参数。
"""

"""
*****************
五、模型评估与选择
*****************
"""

## 5.1 交叉验证
from sklearn.model_selection import cross_val_score
cross_val_score(model, X, y=None, scoring=None, cv=None, n_jobs=1)
"""参数
---
  model:拟合数据的模型
  cv : k-fold
  scoring: 打分参数-‘accuracy'、‘f1'、‘precision'、‘recall' 、‘roc_auc'、'neg_log_loss'等等
"""

## 5.2 检验曲线
from sklearn.model_selection import validation_curve
train_score, test_score = validation_curve(model, X, y, param_name, param_range, cv=None, scoring=None, n_jobs=1)
"""参数
---
  model:用于fit和predict的对象
  X, y: 训练集的特征和标签
  param_name:将被改变的参数的名字
  param_range: 参数的改变范围
  cv:k-fold

返回值
---
  train_score: 训练集得分(array)
  test_score: 验证集得分(array)
"""

"""
*****************
六、保存模型
*****************
"""
## 6.1 保存为pickle文件
import pickle

# 保存模型
with open('model.pickle', 'wb') as f:
  pickle.dump(model, f)

# 读取模型
with open('model.pickle', 'rb') as f:
  model = pickle.load(f)
model.predict(X_test)

## 6.2 sklearn方法自带joblib
from sklearn.externals import joblib

# 保存模型
joblib.dump(model, 'model.pickle')

#载入模型
model = joblib.load('model.pickle')

以上就是Python机器学习工具scikit-learn的使用笔记的详细内容,更多关于Python机器学习工具scikit-learn的资料请关注我们其它相关文章!

(0)

相关推荐

  • python机器学习库scikit-learn:SVR的基本应用

    scikit-learn是python的第三方机器学习库,里面集成了大量机器学习的常用方法.例如:贝叶斯,svm,knn等. scikit-learn的官网 : http://scikit-learn.org/stable/index.html点击打开链接 SVR是支持向量回归(support vector regression)的英文缩写,是支持向量机(SVM)的重要的应用分支. scikit-learn中提供了基于libsvm的SVR解决方案. PS:libsvm是台湾大学林智仁教授等开发设

  • 基于Python和Scikit-Learn的机器学习探索

    你好,%用户名%! 我叫Alex,我在机器学习和网络图分析(主要是理论)有所涉猎.我同时在为一家俄罗斯移动运营商开发大数据产品.这是我第一次在网上写文章,不喜勿喷. 现在,很多人想开发高效的算法以及参加机器学习的竞赛.所以他们过来问我:"该如何开始?".一段时间以前,我在一个俄罗斯联邦政府的下属机构中领导了媒体和社交网络大数据分析工具的开发.我仍然有一些我团队使用过的文档,我乐意与你们分享.前提是读者已经有很好的数学和机器学习方面的知识(我的团队主要由MIPT(莫斯科物理与技术大学)和

  • Python机器学习库scikit-learn安装与基本使用教程

    本文实例讲述了Python机器学习库scikit-learn安装与基本使用.分享给大家供大家参考,具体如下: 引言 scikit-learn是Python的一个开源机器学习模块,它建立在NumPy,SciPy和matplotlib模块之上能够为用户提供各种机器学习算法接口,可以让用户简单.高效地进行数据挖掘和数据分析. scikit-learn安装 python 中安装许多模板库之前都有依赖关系,安装 scikit-learn 之前需要以下先决条件: Python(>= 2.6 or >= 3

  • Python机器学习算法库scikit-learn学习之决策树实现方法详解

    本文实例讲述了Python机器学习算法库scikit-learn学习之决策树实现方法.分享给大家供大家参考,具体如下: 决策树 决策树(DTs)是一种用于分类和回归的非参数监督学习方法.目标是创建一个模型,通过从数据特性中推导出简单的决策规则来预测目标变量的值. 例如,在下面的例子中,决策树通过一组if-then-else决策规则从数据中学习到近似正弦曲线的情况.树越深,决策规则越复杂,模型也越合适. 决策树的一些优势是: 便于说明和理解,树可以可视化表达: 需要很少的数据准备.其他技术通常需要

  • Python机器学习之scikit-learn库中KNN算法的封装与使用方法

    本文实例讲述了Python机器学习之scikit-learn库中KNN算法的封装与使用方法.分享给大家供大家参考,具体如下: 1.工具准备,python环境,pycharm 2.在机器学习中,KNN是不需要训练过程的算法,也就是说,输入样例可以直接调用predict预测结果,训练数据集就是模型.当然这里必须将训练数据和训练标签进行拟合才能形成模型. 3.在pycharm中创建新的项目工程,并在项目下新建KNN.py文件. import numpy as np from math import s

  • Python机器学习工具scikit-learn的使用笔记

    scikit-learn 是基于 Python 语言的机器学习工具 简单高效的数据挖掘和数据分析工具 可供大家在各种环境中重复使用 建立在 NumPy ,SciPy 和 matplotlib 上 开源,可商业使用 - BSD许可证 sklearn 中文文档:http://www.scikitlearn.com.cn/ 官方文档:http://scikit-learn.org/stable/ sklearn官方文档的类容和结构如下: sklearn是基于numpy和scipy的一个机器学习算法库,

  • pyCaret效率倍增开源低代码的python机器学习工具

    目录 PyCaret 时间序列模块 加载数据 初始化设置 统计测试 探索性数据分析 模型训练和选择 保存模型 PyCaret 是一个开源.低代码的 Python 机器学习库,可自动执行机器学习工作流.它是一种端到端的机器学习和模型管理工具,可以以指数方式加快实验周期并提高您的工作效率.欢迎收藏学习,喜欢点赞支持,文末提供技术交流群. 与其他开源机器学习库相比,PyCaret 是一个替代的低代码库,可用于仅用几行代码替换数百行代码. 这使得实验速度和效率呈指数级增长. PyCaret 本质上是围绕

  • python机器学习使数据更鲜活的可视化工具Pandas_Alive

    目录 安装方法 使用说明 支持示例展示 水平条形图 垂直条形图比赛 条形图 饼图 多边形地理空间图 多个图表 总结 数据动画可视化制作在日常工作中是非常实用的一项技能.目前支持动画可视化的库主要以Matplotlib-Animation为主,其特点为:配置复杂,保存动图容易报错. 安装方法 pip install pandas_alive # 或者 conda install pandas_alive -c conda-forge 使用说明 pandas_alive 的设计灵感来自 bar_ch

  • Python 机器学习库 NumPy入门教程

    NumPy是一个Python语言的软件包,它非常适合于科学计算.在我们使用Python语言进行机器学习编程的时候,这是一个非常常用的基础库. 本文是对它的一个入门教程. 介绍 NumPy是一个用于科技计算的基础软件包,它是Python语言实现的.它包含了: 强大的N维数组结构 精密复杂的函数 可集成到C/C++和Fortran代码的工具 线性代数,傅里叶变换以及随机数能力 除了科学计算的用途以外,NumPy也可被用作高效的通用数据的多维容器.由于它适用于任意类型的数据,这使得NumPy可以无缝和

  • python机器学习库常用汇总

    汇总整理一套Python网页爬虫,文本处理,科学计算,机器学习和数据挖掘的兵器谱. 1. Python网页爬虫工具集 一个真实的项目,一定是从获取数据开始的.无论文本处理,机器学习和数据挖掘,都需要数据,除了通过一些渠道购买或者下载的专业数据外,常常需要大家自己动手爬数据,这个时候,爬虫就显得格外重要了,幸好,Python提供了一批很不错的网页爬虫工具框架,既能爬取数据,也能获取和清洗数据,也就从这里开始了: 1.1 Scrapy 鼎鼎大名的Scrapy,相信不少同学都有耳闻,课程图谱中的很多课

  • Python机器学习logistic回归代码解析

    本文主要研究的是Python机器学习logistic回归的相关内容,同时介绍了一些机器学习中的概念,具体如下. Logistic回归的主要目的:寻找一个非线性函数sigmod最佳的拟合参数 拟合.插值和逼近是数值分析的三大工具 回归:对一直公式的位置参数进行估计 拟合:把平面上的一些系列点,用一条光滑曲线连接起来 logistic主要思想:根据现有数据对分类边界线建立回归公式.以此进行分类 sigmoid函数:在神经网络中它是所谓的激励函数.当输入大于0时,输出趋向于1,输入小于0时,输出趋向0

  • 浅析python打包工具distutils、setuptools

    python中安装包的方式有很多种: 源码包:python setup.py install 在线安装:pip install 包名(linux) / easy_install 包名(window) python包在开发中十分常见,一般的使用套路是所有的功能做一个python模块包,打包模块,然后发布,安装使用.打包和安装包就是最常见的工作.学习中遇到distutils和setuptools两种打包的工具,学习之后做笔记记录. distutils distutils 是 python 标准库的一

  • 用于ETL的Python数据转换工具详解

    ETL的考虑   做 数据仓库系统,ETL是关键的一环.说大了,ETL是数据整合解决方案,说小了,就是倒数据的工具.回忆一下工作这么些年来,处理数据迁移.转换的工作倒 还真的不少.但是那些工作基本上是一次性工作或者很小数据量,使用access.DTS或是自己编个小程序搞定.可是在数据仓库系统中,ETL上升到了一 定的理论高度,和原来小打小闹的工具使用不同了.究竟什么不同,从名字上就可以看到,人家已经将倒数据的过程分成3个步骤,E.T.L分别代表抽取.转换 和装载. 其 实ETL过程就是数据流动的

随机推荐