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 相关文章推荐
phpsir 开发 一个检测百度关键字网站排名的python 程序
Sep 17 Python
python执行外部程序的常用方法小结
Mar 21 Python
举例讲解Python中metaclass元类的创建与使用
Jun 30 Python
彻底搞懂Python字符编码
Jan 23 Python
Python对excel文档的操作方法详解
Dec 10 Python
详解pandas的外部数据导入与常用方法
May 01 Python
django 快速启动数据库客户端程序的方法示例
Aug 16 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
Mar 06 Python
TensorFlow使用Graph的基本操作的实现
Apr 22 Python
python实现学生信息管理系统(精简版)
Nov 27 Python
Python基础之操作MySQL数据库
May 06 Python
Python基于百度API识别并提取图片中文字
Jun 27 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命令行使用方法和命令行参数说明
2014/04/08 PHP
php中session过期时间设置及session回收机制介绍
2014/05/05 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
2016/01/07 PHP
IE中jscript/javascript的条件编译
2006/09/07 Javascript
检查输入的是否是数字使用keyCode配合onkeypress事件
2014/01/23 Javascript
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
jQuery手动点击实现图片轮播特效
2020/04/20 Javascript
浅谈angular懒加载的一些坑
2016/08/20 Javascript
jQuery UI制作选项卡(tabs)
2016/12/13 Javascript
js实现登录验证码
2016/12/22 Javascript
Bootstrap3 多选和单选框(checkbox)
2016/12/29 Javascript
JS闭包用法实例分析
2017/03/27 Javascript
老生常谈ES6中的类
2017/07/31 Javascript
Node.js 中使用 async 函数的方法
2017/11/20 Javascript
vue 本地服务不能被外部IP访问的完美解决方法
2018/10/29 Javascript
浅谈一种让小程序支持JSX语法的新思路
2019/06/16 Javascript
纯JS实现五子棋游戏
2020/05/28 Javascript
JavaScript 中判断变量是否为数字的示例代码
2020/10/22 Javascript
Python实现的多线程端口扫描工具分享
2015/01/21 Python
python 返回列表中某个值的索引方法
2018/11/07 Python
python正则表达式去除两个特殊字符间的内容方法
2018/12/24 Python
通过shell+python实现企业微信预警
2019/03/07 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
2019/07/03 Python
VSCode中自动为Python文件添加头部注释
2019/11/14 Python
mac使用python识别图形验证码功能
2020/01/10 Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
2020/03/10 Python
经济管理专业毕业生推荐信
2013/11/11 职场文书
医学专业毕业生个人的求职信
2013/12/04 职场文书
秘书专业自荐信范文
2013/12/26 职场文书
房产销售独家委托书范本
2014/10/01 职场文书
小学生毕业评语
2014/12/26 职场文书
MySQL 角色(role)功能介绍
2021/04/24 MySQL
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python
Python初识逻辑与if语句及用法大全
2021/08/07 Python
Go结合Gin导出Mysql数据到Excel表格
2022/08/05 Golang