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实现批量把SVG格式转成png、pdf格式的代码分享
Aug 21 Python
Python中字典创建、遍历、添加等实用操作技巧合集
Jun 02 Python
对Python 2.7 pandas 中的read_excel详解
May 04 Python
使用Python 统计高频字数的方法
Jan 31 Python
Django后端接收嵌套Json数据及解析详解
Jul 17 Python
Python3的unicode编码转换成中文的问题及解决方案
Dec 10 Python
python中sort sorted reverse reversed函数的区别说明
May 11 Python
python中JWT用户认证的实现
May 18 Python
Python定时任务APScheduler安装及使用解析
Aug 07 Python
通过代码实例了解Python sys模块
Sep 14 Python
如何将Pycharm中调整字体大小的方式设置为"ctrl+鼠标滚轮上下滑"
Nov 17 Python
python基础之模块的导入
Oct 24 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
星际流派综述
2020/03/04 星际争霸
PHP 递归效率分析
2009/11/24 PHP
利用php绘制饼状图的实现代码
2013/06/07 PHP
php使用指定字符列表生成随机字符串的方法
2015/04/18 PHP
在IE,Firefox,Safari,Chrome,Opera浏览器上调试javascript
2008/12/02 Javascript
几个比较经典常用的jQuery小技巧
2010/03/01 Javascript
JavaScript中字符串分割函数split用法实例
2015/04/07 Javascript
javascript模拟命名空间
2015/04/17 Javascript
jQuery插件实现带圆点的焦点图片轮播切换
2016/01/18 Javascript
第二次聊一聊JS require.js模块化工具的基础知识
2016/04/17 Javascript
JS图片等比例缩放方法完整示例
2016/08/03 Javascript
AngularJS利用Controller完成URL跳转
2016/08/09 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单
2016/11/25 Javascript
详解AngularJS 路由 resolve用法
2017/04/24 Javascript
详解nodeJS之路径PATH模块
2017/05/31 NodeJs
完美实现js拖拽效果 return false用法详解
2017/07/28 Javascript
详解基于Angular4+ server render(服务端渲染)开发教程
2017/08/28 Javascript
webpack 打包压缩js和css的方法示例
2018/03/20 Javascript
vue.js自定义组件directives的实例代码
2018/11/09 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
2020/09/02 Javascript
Python中 Lambda表达式全面解析
2016/11/28 Python
Python-OpenCV基本操作方法详解
2018/04/02 Python
python实现桌面壁纸切换功能
2019/01/21 Python
Django多进程滚动日志问题解决方案
2019/12/17 Python
pyinstaller还原python代码过程图解
2020/01/08 Python
selenium+python实现基本自动化测试的示例代码
2021/01/27 Python
python绘制汉诺塔
2021/03/01 Python
html5开发三八女王节表白神器
2018/03/07 HTML / CSS
StubHub哥伦比亚:购买和出售您的门票
2016/10/20 全球购物
100%植物性、有机、即食餐:Sakara Life
2018/10/25 全球购物
应届毕业生求职信范文
2014/05/08 职场文书
影视后期实训报告
2014/11/05 职场文书
导游词之海南天涯海角
2019/12/05 职场文书
redis内存空间效率问题的深入探究
2021/05/17 Redis
深入理解CSS 中 transform matrix矩阵变换问题
2021/08/30 HTML / CSS
MySQL分区表实现按月份归类
2021/11/01 MySQL