python sklearn库(4)

45 篇文章 0 订阅
12 篇文章 1 订阅

数据集拆分

在得到训练数据集时,通常我们经常会把训练数据进一步拆分成训练集和验证集,这样有助于我们模型参数的选取。train_test_split是交叉验证中常用的函数,功能是从样本中随机的按比例选取train data和testdata,形式为:

X_train,X_test, y_train, y_test =
 
cross_validation.train_test_split(train_data,train_target,test_size=0.4, random_state=0)

注意:train_test_split 不再 cross_validation中,已经移到 model_selection 中。
参数解释

train_data:所要划分的样本特征集
train_target:所要划分的样本结果
test_size:样本占比,如果是整数的话就是样本的数量
random_state:是随机数的种子。
随机数种子:其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如你每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。
随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:

种子不同,产生不同的随机数
种子相同,即使实例不同也产生相同的随机数
参数说明
在这里插入图片描述

示例
# 作用:将数据集划分为 训练集和测试集
# 格式: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)
"""

拆分参数遇到的问题及其解决方法
导入模块
from sklearn.cross_validation import cross_val_score
则会报错,代码如下:
from sklearn.cross_validation import cross_val_score
ModuleNotFoundError: No module named 'sklearn.cross_validation'
解决方法:
from sklearn.model_selection import cross_val_score
### 定义模型
在这一步我们首先要分析自己数据的类型,明白自己要用什么模型来做,然后我们就可以在sklearn中定义模型了,sklearn为所有模型提供了非常相似的接口,这样使得我们可以更加快速的熟悉所有模型的用法,在这之前,我们先来看看模型的常用属性和功能。
``
# 拟合模型
model.fit(X_train, y_train)
# 模型预测
model.predict(X_test)
 
# 获得这个模型的参数
model.get_params()
# 为模型进行打分
model.score(data_X, data_y) # 线性回归:R square; 分类问题: acc
线性回归

在这里插入图片描述

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

逻辑回归LR
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: 是否需要常量
"""
朴素贝叶斯算法NB(Naive Bayes)
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,则假设输入由二进制向量组成
"""
决策树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:如果这种分离导致杂质的减少大于或等于这个值,则节点将被拆分。
"""
支持向量机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.
"""
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:并行任务数
"""
多层感知器(神经网络)
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惩罚(正则化项)参数。
"""

模型评估与选择

评价指标针对不同的机器学习任务有不同的指标,同一任务也有不同侧重点的评价指标。以下方法,sklearn中都在sklearn.metrics类下,务必记住那些指标适合分类,那些适合回归。

机器学习常用的评估指标请参考博文:Python机器学习笔记:常用评估指标的前世今生

交叉验证

交叉验证cross_val_score的scoring参数

分类:accuracy(准确率)、f1、f1_micro、f1_macro(这两个用于多分类的f1_score)、precision(精确度)、recall(召回率)、roc_auc
回归:neg_mean_squared_error(MSE、均方误差)、r2
聚类:adjusted_rand_score、completeness_score等

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

(补充):交叉验证的学习

导入k折交叉验证模块

注意cross_val_score 是根据模型进行计算,计算交叉验证的结果,可以简单的认为cross_val_score中调用了KFold 进行数据集划分。

from sklearn.model_selection import cross_val_score

交叉验证的思想

把某种意义下将原始数据(dataset)进行分组,一部分作为训练集(train set),另一部分作为验证集(validation set or test set),首先用训练集对分类器进行训练,再利用验证集来测试训练得到的模型(model),以此来作为评价分类器的性能指标。

为什么使用交叉验证法

交叉验证用于评估模型的预测性能,尤其是训练好的模型在新数据上的表现,可以在一定程序熵减少过拟合。
交叉验证还可以从有限的数据中获取尽可能多的有效信息

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值