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参数和作用域的使用
Nov 01 Python
浅谈Python中range和xrange的区别
Dec 20 Python
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
Jan 11 Python
Python实现翻转数组功能示例
Jan 12 Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
Feb 24 Python
pandas数据处理基础之筛选指定行或者指定列的数据
May 03 Python
python字符串与url编码的转换实例
May 10 Python
Python骚操作之动态定义函数
Mar 26 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
May 21 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
Aug 12 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
Aug 12 Python
如何理解python对象
Jun 21 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企业级应用之常见缓存技术篇
2011/01/27 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
2018/01/15 PHP
鼠标图片振动代码
2006/07/06 Javascript
很全的显示阴历(农历)日期的js代码
2009/01/01 Javascript
json原理分析及实例介绍
2012/11/29 Javascript
javascript实现设置、获取和删除Cookie的方法
2015/06/01 Javascript
Node.js中使用socket创建私聊和公聊聊天室
2015/11/19 Javascript
JS判断输入字符串长度实例代码(汉字算两个字符,字母数字算一个)
2016/08/02 Javascript
ajax级联菜单实现方法实例分析
2016/11/28 Javascript
实例详解display:none与visible:hidden的区别
2017/03/30 Javascript
jq源码解析之绑在$,jQuery上面的方法(实例讲解)
2017/10/13 jQuery
微信小程序支付之c#后台实现方法
2017/10/19 Javascript
JavaScript设计模式之原型模式分析【ES5与ES6】
2018/07/26 Javascript
javascript中函数的写法实例代码详解
2018/10/28 Javascript
js实现图片区域可点击大小随意改变(适用移动端)代码实例
2019/09/11 Javascript
Vue 解决通过this.$refs来获取DOM或者组件报错问题
2020/07/28 Javascript
五句话帮你轻松搞定js原型链
2020/12/09 Javascript
[46:16]2018DOTA2亚洲邀请赛3月30日 小组赛B组 iG VS VP
2018/03/31 DOTA
极简的Python入门指引
2015/04/01 Python
理解python正则表达式
2016/01/15 Python
Python爬虫之模拟知乎登录的方法教程
2017/05/25 Python
Python判断文件或文件夹是否存在的三种方法
2017/07/27 Python
Python实现PS图像调整黑白效果示例
2018/01/25 Python
Python中拆分字符串的操作方法
2019/07/23 Python
flask框架路由常用定义方式总结
2019/07/23 Python
Python模块future用法原理详解
2020/01/20 Python
Python3 利用face_recognition实现人脸识别的方法
2020/03/13 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
2020/04/17 Python
Python中如何添加自定义模块
2020/06/09 Python
HTML5拍照和摄像机功能实战详解
2019/01/24 HTML / CSS
斯福泰克软件测试面试题
2015/02/16 面试题
先进个人事迹材料
2014/01/25 职场文书
校园学雷锋活动月总结
2014/03/09 职场文书
理财投资建议书
2014/03/12 职场文书
销售顾问工作计划书
2014/08/15 职场文书
Golang流模式之grpc的四种数据流
2022/04/13 Golang