深入浅析Python 中的sklearn模型选择


Posted in Python onOctober 12, 2019

1.主要功能如下:

1.classification分类
2.Regression回归
3.Clustering聚类
4.Dimensionality reduction降维
5.Model selection模型选择
6.Preprocessing预处理

2.主要模块分类:

1.sklearn.base: Base classes and utility function基础实用函数
2.sklearn.cluster: Clustering聚类
3.sklearn.cluster.bicluster: Biclustering 双向聚类
4.sklearn.covariance: Covariance Estimators 协方差估计
5.sklearn.model_selection: Model Selection 模型选择
6.sklearn.datasets: Datasets 数据集
7.sklearn.decomposition: Matrix Decomposition 矩阵分解
8.sklearn.dummy: Dummy estimators 虚拟估计
9.sklearn.ensemble: Ensemble Methods 集成方法
10.sklearn.exceptions: Exceptions and warnings 异常和警告
11.sklearn.feature_extraction: Feature Extraction 特征抽取
12.sklearn.feature_selection: Feature Selection 特征选择
13。sklearn.gaussian_process: Gaussian Processes 高斯过程
14.sklearn.isotonic: Isotonic regression 保序回归
15.sklearn.kernel_approximation: Kernel Approximation 核 逼近
16.sklearn.kernel_ridge: Kernel Ridge Regression 岭回归ridge
17.sklearn.discriminant_analysis: Discriminant Analysis 判别分析
18.sklearn.linear_model: Generalized Linear Models 广义线性模型
19.sklearn.manifold: Manifold Learning 流形学习
20.sklearn.metrics: Metrics 度量 权值
21.sklearn.mixture: Gaussian Mixture Models 高斯混合模型
22.sklearn.multiclass: Multiclass and multilabel classification 多等级标签分类
23.sklearn.multioutput: Multioutput regression and classification 多元回归和分类
24.sklearn.naive_bayes: Naive Bayes 朴素贝叶斯
25.sklearn.neighbors: Nearest Neighbors 最近邻
26.sklearn.neural_network: Neural network models 神经网络
27.sklearn.calibration: Probability Calibration 概率校准
28.sklearn.cross_decomposition: Cross decomposition 交叉求解
29.sklearn.pipeline: Pipeline 管道
30.sklearn.preprocessing: Preprocessing and Normalization 预处理和标准化
31.sklearn.random_projection: Random projection 随机映射
32.sklearn.semi_supervised: Semi-Supervised Learning 半监督学习
33.sklearn.svm: Support Vector Machines 支持向量机
34.sklearn.tree: Decision Tree 决策树
35.sklearn.utils: Utilities 实用工具

3.数据预处理:

from sklearn import preprocessing

标准化处理函数

将数据转化为标准正态分布(均值为0,方差为1)

preprocessing.scale(X,axis=0, with_mean=True, with_std=True, copy=True)

将数据在缩放在固定区间,默认缩放到区间 [0, 1]

preprocessing.minmax_scale(X,feature_range=(0, 1), axis=0, copy=True)

数据的缩放比例为绝对值最大值,并保留正负号,即在区间 [-1.0, 1.0] 内。唯一可用于稀疏数据 scipy.sparse的标准化
preprocessing.maxabs_scale(X,axis=0, copy=True)

通过 Interquartile Range (IQR) 标准化数据,即四分之一和四分之三分位点之间
preprocessing.robust_scale(X,axis=0, with_centering=True, with_scaling=True,copy=True)

标准化正态分布类

基于mean和std的标准化

classpreprocessing.StandardScaler(copy=True, with_mean=True,with_std=True)
 # 属性:
 # scale_:ndarray,缩放比例
 # mean_:ndarray,均值
 # var_:ndarray,方差
 # n_samples_seen_:int,已处理的样本个数,调用partial_fit()时会累加,调用fit()会重设
 # 这里可以根据训练集进行标准化,测试集沿用训练集的标准化方法!
 scaler = preprocessing.StandardScaler().fit(train_data)
 scaler.transform(train_data)
 scaler.transform(test_data)
 # 将每个特征值归一化到一个固定范围
 scaler = preprocessing.MinMaxScaler(feature_range=(0, 1)).fit(train_data)
 scaler.transform(train_data)
 scaler.transform(test_data)

将数据在缩放在固定区间的类,默认缩放到区间 [0, 1]

classpreprocessing.MinMaxScaler(feature_range=(0, 1),copy=True):
 # 属性:
 # min_:ndarray,缩放后的最小值偏移量
 # scale_:ndarray,缩放比例
 # data_min_:ndarray,数据最小值
 # data_max_:ndarray,数据最大值
 # data_range_:ndarray,数据最大最小范围的长度

数据的缩放比例为绝对值最大值,并保留正负号,即在区间 [-1.0, 1.0] 内。可以用于稀疏数据scipy.sparse

classpreprocessing.MaxAbsScaler(copy=True):
 # 属性:
 # scale_:ndarray,缩放比例
 # max_abs_:ndarray,绝对值最大值
 # n_samples_seen_:int,已处理的样本个数

通过 Interquartile Range (IQR) 标准化数据,即四分之一和四分之三分位点之间

classpreprocessing.RobustScaler(with_centering=True,with_scaling=True, copy=True):
 # 属性:
 # center_:ndarray,中心点
 # scale_:ndarray,缩放比例

生成 kernel 矩阵,用于将 svm kernel 的数据标准化

classpreprocessing.KernelCenterer:

以上几个标准化类的方法:

fit(X[,y]):根据数据 X 的值,设置标准化缩放的比例
transform(X[,y, copy]):用之前设置的比例标准化 X
fit_transform(X[, y]):根据 X设置标准化缩放比例并标准化
partial_fit(X[,y]):累加性的计算缩放比例
inverse_transform(X[,copy]):将标准化后的数据转换成原数据比例
get_params([deep]):获取参数
set_params(**params):设置参数

正则化

# 计算两个样本的相似度时必不可少的一个操作,就是正则化。其思想是:首先求出样本的p-范数,然后该样本的所有元素都要除以该范数,这样最终使得每个样本的范数都为1。
# L1 norm 是指对每个样本的每一个元素都除以该样本的L1范数. 使行和为1

# eg. 0.47619048 = 10 /(10+4+5+2)
 X = np.array([[10,4,5,2], [1,4,5,7]])
 X_normalized = preprocessing.normalize(X, norm='l1')
 X_normalized          
 array([[ 0.47619048, 0.19047619, 0.23809524, 0.0952381 ],
   [ 0.05882353, 0.23529412, 0.29411765, 0.41176471]])

 #L2 norm 是指对每个样本的每一个元素都除以该样本的L2范数. 
 # eg. 0.4 = 1/sqrt(1+1+4)
 X = [[ 1., -1., 2.],
   [ 2., 0., 0.],
   [ 0., 1., -1.]]
 X_normalized = preprocessing.normalize(X, norm='l2')

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

4.数据集:

将数据集分为训练集和测试集

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)

5.模型选择:

模型流程:

# 拟合模型
model.fit(X_train, y_train)

# 模型预测
model.predict(X_test)

# 获得这个模型的参数
model.get_params()

# 为模型进行打分
model.score(data_X, data_y)

线性回归

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:指定线程数
 """

逻辑回归

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: 是否需要常量
 """

朴素贝叶斯

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)
 """

  alpha:平滑参数
  fit_prior:是否要学习类的先验概率;false-使用统一的先验概率
  class_prior: 是否指定类的先验概率;若指定则不能根据参数调整
  binarize: 二值化的阈值,若为None,则假设输入由二进制向量组成
 """

决策树

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:如果这种分离导致杂质的减少大于或等于这个值,则节点将被拆分。
 """

支持向量机SVM

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.
 """

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:并行任务数
 """

多层感知器

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惩罚(正则化项)参数。
 """

交叉验证

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'等等
 """

检验曲线

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

 """

6.模型保存:

# 保存为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)

 # sklearn自带方法joblib
 from sklearn.externals import joblib
 # 保存模型
 joblib.dump(model, 'model.pickle')
 #载入模型
 model = joblib.load('model.pickle')

总结

以上所述是小编给大家介绍的Python sklearn模型选择,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python使用shelve模块实现简单数据存储的方法
May 20 Python
Python的消息队列包SnakeMQ使用初探
Jun 29 Python
python实现决策树、随机森林的简单原理
Mar 26 Python
Win8下python3.5.1安装教程
Jul 29 Python
PyCharm代码回滚,恢复历史版本的解决方法
Oct 22 Python
对python cv2批量灰度图片并保存的实例讲解
Nov 09 Python
python 运用Django 开发后台接口的实例
Dec 11 Python
Python基础学习之时间转换函数用法详解
Jun 18 Python
使用Python脚本zabbix自定义key监控oracle连接状态
Aug 28 Python
pytorch三层全连接层实现手写字母识别方式
Jan 14 Python
用python实现一个简单的验证码
Dec 09 Python
Python编写万花尺图案实例
Jan 03 Python
浅析pandas 数据结构中的DataFrame
Oct 12 #Python
pandas 缺失值与空值处理的实现方法
Oct 12 #Python
深入浅析Python科学计算库Scipy及安装步骤
Oct 12 #Python
Django1.11配合uni-app发起微信支付的实现
Oct 12 #Python
Python数据处理篇之Sympy系列(五)---解方程
Oct 12 #Python
详解Python绘图Turtle库
Oct 12 #Python
Python中的list与tuple集合区别解析
Oct 12 #Python
You might like
linux下 C语言对 php 扩展
2008/12/14 PHP
超级好用的一个php上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
2016/08/19 PHP
刷新页面实现方式总结(HTML,ASP,JS)
2008/11/13 Javascript
Javascript学习笔记一 之 数据类型
2010/12/15 Javascript
解读JavaScript中 For, While与递归的用法
2013/05/07 Javascript
鼠标移到图片上变大显示而不是放大镜效果
2014/06/15 Javascript
jquery实现保存已选用户
2014/07/21 Javascript
纯JavaScript实现获取onclick、onchange等事件的值
2014/12/29 Javascript
JavaScript操作HTML DOM节点的基础教程
2016/03/11 Javascript
JS密码生成与强度检测完整实例(附demo源码下载)
2016/04/06 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
2016/10/30 Javascript
jQuery基于ajax实现页面加载后检查用户登录状态的方法
2017/02/10 Javascript
js微信分享实现代码
2020/10/11 Javascript
微信小程序scroll-view实现滚动穿透和阻止滚动的方法
2018/08/20 Javascript
vue中keep-alive组件的入门使用教程
2019/06/06 Javascript
Vue如何将页面导出成PDF文件
2020/08/17 Javascript
jQuery中getJSON跨域原理的深入讲解
2020/09/02 jQuery
vue实现简单计算商品价格
2020/09/14 Javascript
python条件和循环的使用方法
2013/11/01 Python
python函数形参用法实例分析
2015/08/04 Python
python魔法方法-属性访问控制详解
2016/07/25 Python
python文件名和文件路径操作实例
2017/09/29 Python
Python语言描述随机梯度下降法
2018/01/04 Python
利用Python yagmail三行代码实现发送邮件
2018/05/11 Python
python爬取网页转换为PDF文件
2018/06/07 Python
python实现动态创建类的方法分析
2019/06/25 Python
Python使用GitPython操作Git版本库的方法
2020/02/29 Python
关于python 跨域处理方式详解
2020/03/28 Python
python 通过exifread读取照片信息
2020/12/24 Python
Pyecharts 中Geo函数常用参数的用法说明
2021/02/01 Python
Eastbay官网:美国最大的运动鞋网络零售商
2016/07/27 全球购物
越南综合购物网站:Lazada越南
2019/06/10 全球购物
曼城官方网上商店:Manchester City
2019/09/10 全球购物
四群教育工作总结
2015/08/10 职场文书
护士爱岗敬业心得体会
2016/01/25 职场文书