深入浅析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去除列表中重复元素的方法
Mar 20 Python
python根据京东商品url获取产品价格
Aug 09 Python
Python中字典的基础知识归纳小结
Aug 19 Python
Python实现爬取需要登录的网站完整示例
Aug 19 Python
Scrapy抓取京东商品、豆瓣电影及代码分享
Nov 23 Python
python 实现在txt指定行追加文本的方法
Apr 29 Python
Django中的Model操作表的实现
Jul 24 Python
浅谈python的dataframe与series的创建方法
Nov 12 Python
python批量下载网站马拉松照片的完整步骤
Dec 05 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
Sep 06 Python
django ObjectDoesNotExist 和 DoesNotExist的用法
Jul 09 Python
Python 如何将integer转化为罗马数(3999以内)
Jun 05 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
Windows下PHP的任意文件执行漏洞
2006/10/09 PHP
谈PHP生成静态页面分析 模板+缓存+写文件
2009/08/17 PHP
php HandlerSocket的使用
2011/05/02 PHP
深入分析php中接口与抽象类的区别
2013/06/08 PHP
js或css实现滚动广告的几种方案
2010/01/28 Javascript
动态载入/删除/更新外部 JavaScript/Css 文件的代码
2010/07/03 Javascript
Javascript跨域请求的4种解决方式
2013/03/17 Javascript
做好七件事帮你提升jQuery的性能
2014/02/06 Javascript
JavaScript代码应该放在HTML代码哪个位置比较好?
2014/10/16 Javascript
Javascript基础教程之JavaScript语法
2015/01/18 Javascript
Javascript实现图片轮播效果(二)图片序列节点的控制实现
2016/02/17 Javascript
BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击)
2016/08/18 Javascript
解决vue 按钮多次点击重复提交数据问题
2018/05/10 Javascript
swiper.js插件实现pc端文本上下滑动功能示例
2018/12/03 Javascript
vue跳转页面的几种方法(推荐)
2020/03/26 Javascript
[50:12]EG vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[52:03]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第三场 1月31日
2021/03/11 DOTA
将Emacs打造成强大的Python代码编辑工具
2015/11/20 Python
举例讲解Python设计模式编程中的访问者与观察者模式
2016/01/26 Python
python之DataFrame实现excel合并单元格
2021/02/22 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
2020/01/10 Python
Python openpyxl 插入折线图实例
2020/04/17 Python
Python爬虫代理池搭建的方法步骤
2020/09/28 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
Canvas 像素处理之改变透明度的实现代码
2019/01/08 HTML / CSS
英国性能汽车零件和发动机配件在线:Maxpeedingrods
2019/11/05 全球购物
俄罗斯电动工具和设备购物网站:Vseinstrumenti.ru
2020/11/12 全球购物
机电工程专业应届生求职信
2013/10/03 职场文书
机电专业毕业生求职信
2013/10/27 职场文书
学校班子个人对照检查材料思想汇报
2014/09/27 职场文书
毕业论文答辩开场白
2015/05/27 职场文书
关于公司年会的开幕词
2016/03/04 职场文书
开学第一周日记(三篇范文)
2019/08/23 职场文书
html5 录制mp3音频支持采样率和比特率设置
2021/07/15 Javascript
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL