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


Posted in Python onJanuary 28, 2021

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

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

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

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

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

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

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的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
使用python实现strcmp函数功能示例
Mar 25 Python
Python字典简介以及用法详解
Nov 15 Python
Python实现文件内容批量追加的方法示例
Aug 29 Python
Python实现字符串反转的常用方法分析【4种方法】
Sep 30 Python
理想高通滤波实现Python opencv示例
Jan 30 Python
selenium python 实现基本自动化测试的示例代码
Feb 25 Python
简单了解Python读取大文件代码实例
Dec 18 Python
postman和python mock测试过程图解
Feb 22 Python
python网络编程socket实现服务端、客户端操作详解
Mar 24 Python
python爬虫中PhantomJS加载页面的实例方法
Nov 12 Python
python爬虫基础之urllib的使用
Dec 31 Python
教你漂亮打印Pandas DataFrames和Series
May 29 Python
K近邻法(KNN)相关知识总结以及如何用python实现
Jan 28 #Python
Python3中对json格式数据的分析处理
Jan 28 #Python
Python实现微信表情包炸群功能
Jan 28 #Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
Jan 28 #Python
python如何构建mock接口服务
Jan 28 #Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
Jan 28 #Python
如何用tempfile库创建python进程中的临时文件
Jan 28 #Python
You might like
php数组应用之比较两个时间的相减排序
2008/08/18 PHP
让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享
2011/08/08 PHP
深入array multisort排序原理的详解
2013/06/18 PHP
用php简单实现加减乘除计算器
2014/01/06 PHP
php解析json数据实例
2014/08/19 PHP
laravel5.2实现区分前后台用户登录的方法
2017/01/11 PHP
JavaScript中判断函数是new还是()调用的区别说明
2011/04/07 Javascript
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
2013/04/10 Javascript
javascript向后台传送相同属性的参数即数组参数
2014/02/17 Javascript
jQuery使用fadein方法实现渐出效果实例
2015/03/27 Javascript
javascript组合使用构造函数模式和原型模式实例
2015/06/04 Javascript
再谈JavaScript异步编程
2016/01/27 Javascript
快速掌握Node.js之Window下配置NodeJs环境
2016/03/21 NodeJs
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
BootStrap Table后台分页时前台删除最后一页所有数据refresh刷新后无数据问题
2016/12/28 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
详解vue.js的事件处理器v-on:click
2017/06/27 Javascript
vue-cli点击实现全屏功能
2020/03/07 Javascript
jquery更改元素属性attr()方法操作示例
2020/05/22 jQuery
JavaScript Blob对象原理及用法详解
2020/10/14 Javascript
python 去除txt文本中的空格、数字、特定字母等方法
2018/07/24 Python
python实现逐个读取txt字符并修改
2018/12/24 Python
django-初始配置(纯手写)详解
2019/07/30 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
python中执行smtplib失败的处理方法
2020/07/01 Python
Python JSON常用编解码方法代码实例
2020/09/05 Python
html5时钟实现代码
2010/10/22 HTML / CSS
美国运动鞋和服装网上商店:YCMC
2018/09/15 全球购物
英语文学专业学生的自我评价
2013/10/31 职场文书
本科毕业生求职自荐信
2014/04/09 职场文书
活动总结的格式
2014/05/07 职场文书
电子商务求职信
2014/06/15 职场文书
2015毕业生简历自我评价
2015/03/02 职场文书
标准版个人借条怎么写?以及什么是借条?
2019/08/28 职场文书
如何使用php生成zip压缩包
2021/04/21 PHP
试了下Golang实现try catch的方法
2021/07/01 Golang