使用sklearn进行机器学习,数据挖掘

sklearn是python机器学习最重要的库之一,用于数据挖掘,实现各种算法,sklearn框架概览。

sklearn概览

一、sklearn实现算法:

由图中,可以看到库的算法主要有四类:分类,回归,聚类,降维。其中:

  • 常用的回归:线性、决策树、SVM、KNN ;集成回归:随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees
  • 常用的分类:线性、决策树、SVM、KNN,朴素贝叶斯;集成分类:随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees
  • 常用聚类:k均值(K-means)、层次聚类(Hierarchical clustering)、DBSCAN
  • 常用降维:LinearDiscriminantAnalysis、PCA

二、机器学习主要步骤中sklearn应用

(1)导入数据集

一般数据集分为三种,sklearn自带的,通过方法加载另一种sklearn可以生成数据还有就是自己导入自己的数据集
sklearn自带数据集

(2)数据预处理/特征工程/数据可视化

数据可视化和特征工程,数据预处理都是数据部分最重要的操作,对于适配模型有重要的作用。

详见我的另一篇特征工程博客

详见我的另一篇数据预处理博客

详见我的另一篇数据可视化博客

数据预处理包括:

  • 降维(sklearn.decomposition)
  • 缺失值处理
  • 数据归一化(from sklearn import preprocessing)
  • 数据集的标准化( preprocessing.StandardScaler().fit(traindata))
  • 数据集拆分(from sklearn.mode_selection import train_test_split)
  • 特征选择(sklearn.feature_selection)
  • 特征转换(one-hot)等

这在sklearn里面有很多方法,具体查看api,一般有三种方法

fit():训练算法,设置内部参数。
transform():数据转换。
fit_transform():合并fit和transform两个方法。

主要在sklearn.preprcessing包下。

规范化:

  • MinMaxScaler :最大最小值规范化
  • Normalizer :使每条数据各特征值的和为1
  • StandardScaler
    :为使各特征的均值为0,方差为1

编码:

  • LabelEncoder :把字符串类型的数据转化为整型
  • OneHotEncoder :特征用一个二进制数字来表示
  • Binarizer :为将数值型特征的二值化
  • MultiLabelBinarizer:多标签二值化

(3)模型选择

根据数据来选择模型

常用的回归:线性、决策树、SVM、KNN ;集成回归:随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees

常用的分类:线性、决策树、SVM、KNN,朴素贝叶斯;集成分类:随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees

常用聚类:k均值(K-means)、层次聚类(Hierarchical clustering)、DBSCAN

常用降维:LinearDiscriminantAnalysis、PCA

model一般有两个属性:
fit():训练算法,设置内部参数。接收训练集和类别两个参数。
predict():预测测试集类别,参数为测试集。

(4)模型评估

模型评估方法详见我另一篇博客
交叉验证方法详见我另一篇博客

交叉验证与模型评分

(from sklearn.model_selection import cross_val_score)

包:sklearn.cross_validation

KFold:K-Fold交叉验证迭代器。接收元素个数、fold数、是否清洗
LeaveOneOut:LeaveOneOut交叉验证迭代器
LeavePOut:LeavePOut交叉验证迭代器
LeaveOneLableOut:LeaveOneLableOut交叉验证迭代器
LeavePLabelOut:LeavePLabelOut交叉验证迭代器

常用方法

train_test_split:分离训练集和测试集(不是K-Fold)
cross_val_score:交叉验证评分,可以指认cv为上面的类的实例
cross_val_predict:交叉验证的预测。

处理过拟合问题

  • 学习曲线from sklearn.model_selection import learning_curve
  • 检验曲线from sklearn.model_selection import validation_curve

包:sklearn.metrics
sklearn.metrics包含评分方法、性能度量、成对度量和距离计算。

分类结果度量

参数大多是y_true和y_pred。

accuracy_score:分类准确度
condusion_matrix :分类混淆矩阵
classification_report:分类报告
precision_recall_fscore_support:计算精确度、召回率、f、支持率
jaccard_similarity_score:计算jcaard相似度
hamming_loss:计算汉明损失
zero_one_loss:0-1损失
hinge_loss:计算hinge损失
log_loss:计算log损失

回归结果度量

explained_varicance_score:可解释方差的回归评分函数
mean_absolute_error:平均绝对误差
mean_squared_error:平均平方误差

(5)模型保存

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

三、sklearn 使用技巧

(1)网格搜索

能够网格搜索最佳参数

包:sklearn.grid_search
网格搜索最佳参数

GridSearchCV:搜索指定参数网格中的最佳参数
ParameterGrid:参数网格
ParameterSampler:用给定分布生成参数的生成器
RandomizedSearchCV:超参的随机搜索
通过best_estimator_.get_params()方法,获取最佳参数。

代码示例

from sklearn import datasets,model_selection
iris=datasets.load_iris() # scikit-learn 自带的 iris 数据集
X=iris.data
y=iris.target

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=0)
alg=DecisionTreeClassifier()
parameters={'max_depth':range(1,100),'min_samples_split':range(2,30)}#参数空间
def fit_model(alg,parameters):
  X= X_train
  y= y_train
  scorer=make_scorer(roc_auc_score)
  grid = GridSearchCV(alg,parameters,scoring=scorer,cv=5)
  grid = grid.fit(X,y)
  print (grid.best_params_)
  print (grid.best_score_)
  return grid

fit_model(alg,parameters)

(2)流水线处理(Pipeline)

处理流程
sklearn.pipeline包

流水线的功能与好处:

pipeline 实现了对全部步骤的流式化封装和管理,可以很方便地使参数集在新数据集上被重复使用。
跟踪记录各步骤的操作(以方便地重现实验结果)
对各步骤进行一个封装
确保代码的复杂程度不至于超出掌控范围
可以结合grid search对参数进行选择
直接调用fit和predict方法来对pipeline中的所有算法模型进行训练和预测。

基本使用方法

流水线的输入为一连串的数据挖掘步骤,其中最后一步必须是估计器,前几步是转换器。输入的数据集经过转换器的处理后,输出的结果作为下一步的输入。最后,用位于流水线最后一步的估计器(模型,有fit方法)对数据进行分类。
每一步都用元组( ‘名称’,步骤)来表示。现在来创建流水线。

    from sklearn.pipeline import Pipeline
    scaling_pipeline = Pipeline([
      ('scale', MinMaxScaler()),
      ('predict', KNeighborsClassifier())

(3)sklearn集成学习

sklearn集成学习有一些特别著名的集成方法,包括 bagging, boosting, stacking,能够实现模型融合,达到更好的效果。
详见我的另一篇集成学习博客

猜你喜欢

转载自blog.csdn.net/qq_39751437/article/details/91786404