深入浅析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实现用于测试网站访问速率的方法
May 26 Python
详解Python中contextlib上下文管理模块的用法
Jun 28 Python
Python 中的with关键字使用详解
Sep 11 Python
关于Python的一些学习总结
May 25 Python
浅析Python 中几种字符串格式化方法及其比较
Jul 02 Python
wxPython:python首选的GUI库实例分享
Oct 05 Python
python wxpython 实现界面跳转功能
Dec 17 Python
python程序文件扩展名知识点详解
Feb 27 Python
python批量替换文件名中的共同字符实例
Mar 05 Python
python 日志模块 日志等级设置失效的解决方案
May 26 Python
详解Python中import机制
Sep 11 Python
Python 读取千万级数据自动写入 MySQL 数据库
Jun 28 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
php4的session功能评述(二)
2006/10/09 PHP
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
2006/12/06 PHP
JS与PHP向函数传递可变参数的区别实例代码
2011/05/18 PHP
thinkphp修改配置进入默认首页的方法
2017/02/07 PHP
laravel config文件配置全局变量的例子
2019/10/13 PHP
jQuery实现点击标题输入详细信息
2013/04/16 Javascript
jQuery替换字符串(实例代码)
2013/11/13 Javascript
js实现文字跟随鼠标移动而移动的方法
2015/02/28 Javascript
使用postMesssage()实现跨域iframe页面间的信息传递方法
2016/03/29 Javascript
JS原型对象的创建方法详解
2016/06/16 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/25 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
ES6中箭头函数的定义与调用方式详解
2017/06/02 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
2017/10/24 Javascript
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
关于JavaScript中异步/等待的用法与理解
2020/11/18 Javascript
使用Python脚本生成随机IP的简单方法
2015/07/30 Python
在Django同1个页面中的多表单处理详解
2017/01/25 Python
python email smtplib模块发送邮件代码实例
2018/04/26 Python
python队列queue模块详解
2018/04/27 Python
python实现批量文件重命名
2019/10/31 Python
Python帮你识破双11的套路
2019/11/11 Python
Python底层封装实现方法详解
2020/01/22 Python
python基于socket函数实现端口扫描
2020/05/28 Python
医院护士求职自荐信格式
2013/09/21 职场文书
劳资人员岗位职责
2013/12/19 职场文书
经理管理专业自荐信范文
2013/12/31 职场文书
最新会计专业求职信范文
2014/01/28 职场文书
公司节能减排倡议书
2014/05/14 职场文书
大学生求职信例文
2014/06/29 职场文书
幼儿园植树节活动总结
2014/07/04 职场文书
销售顾问工作计划书
2014/09/15 职场文书
天河观后感
2015/06/11 职场文书
山楂树之恋观后感
2015/06/11 职场文书
护理培训心得体会
2016/01/22 职场文书
Python趣味挑战之给幼儿园弟弟生成1000道算术题
2021/05/28 Python