Scikit-learn(sklearn)是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression)、降维(Dimensionality Reduction)、分类(Classfication)、聚类(Clustering)等方法。

  参考这篇文章的代码:

  【Sklearn】入门花卉数据集实验–理解朴素贝叶斯分类器

  0.sklearn运行流程

  数据集处理

  数据集加载 X=[],标签Y=[] , 比例X:Y=1:1

  数据集分类 train_test_split ->(X_train,X_test,y_train,y_test)

  特征提取

  特征提取(直方图、轮廓描述子…特征数组)

  训练模型

  特征分类(构造分类器(lr线性分类,svm支持向量机分类,beyes贝叶斯分类…))

  用训练数据(X_train,y_train)拟合分类器模型 、保存模型

  预测

  预测 result = predit(X_test)

  分析 classification_report (result)

  1.数据集

  数据集处理中我们常用到:

  datasets : 是sklearn库自带的数据集(iris鸢尾花数据等),前期学习非常友好

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

  from sklearn import datasets#引入数据集,sklearn包含众多数据集

  from sklearn.model_selection import train_test_split#将数据分为测试集和训练集

  iris = datasets.load_iris()#引入iris鸢尾花数据,iris数据包含4个特征变量

  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=1)#利用train_test_split进行将训练集和测试集进行分开,test_size占30%

  print(y_train)#我们看到训练数据的特征值分为3类

  2.模型

  Sklearn的模型导出本质上是利用Python的Pickle机制。对Python的函数进行序列化,也就是把训练好的Transformer函数序列化并存为文件。

  .pkl

  pkl文件是python里面保存文件的一种格式,如果直接打开会显示一堆序列化的东西。

  import pickle

  # 重点是rb和r的区别,rb是打开2进制文件,文本文件用r

  f = open('test.pkl','rb')

  data = pickle.load(f)

  print(data)

  参考这篇文章:sklearn 中模型保存的两种方法

  既然joblib在使用上比较容易,读取速度也相对pickle快,那么我们后面就用joblib进行讨论。

  .m

  1. 保存 、读取、预测

  from sklearn.externals import joblib

  joblib.dump(lr, 'lr.model') # 保存 lr是一个LogisticRegression模型

  lr = joblib.load('lr.model') # 加载

  lr.predit(test_X) # 预测 此处test_X为特征集

  2. 一个完整的svm分类例子

  dataset:特征数组X,标签Y,比例X:Y=1:1

  clf : 构造分类器(lr线性分类,svm支持向量机分类,beyes贝叶斯分类…)

  clf.fit():用训练数据拟合分类器模型

  joblib.dump:保存模型

  joblib.load:加载模型

  clf.predit():预测

  os.chdir("workspace/model_save") # 保存Model(注:model_save文件夹要预先建立,否则会报错)

  from sklearn.externals import joblib

  from sklearn import svm

  X = [[0, 0], [1, 1]]

  y = [0, 1]

  clf = svm.SVC() # clf是训练的分类器

  clf.fit(X, y)

  clf.fit(train_X,train_y)

  joblib.dump(clf, "train_model.m") # 保存

  clf = joblib.load("train_model.m")

  clf.predit(test_X) #此处test_X为特征集

  3.封装郑州人流医院哪家好 http://mobile.zhongyuan120.com/

  from sklearn.externals import joblib

  Class classificationTest():

  #保存模型

  def Save_Model(self, model, filepath):

  joblib.dump(model, filename=filepath)

  def SVM_classifier(self,x_train,y_train):

  clf = svm.SVC() # clf是训练的分类器

  clf.fit(x_train,y_train)

  self.Save_Model(clf,"train_model.m") # 保存模型

  return clf

  def Load_Model(self, filepath):

  model = joblib.load(filepath)

  return model

  def Predict_Model(self, x_test, filpath):

  model = self.Load_Model(filepath)

  result = model.predit(x_test) # 预测

  return result

  其他模型

  其他几种模型后缀的对比:

  .pb

  MetaGraph的protocol buffer格式的文件,MetaGraph包括计算图,数据流,以及相关的变量和输入输出。

  在tensorflow训练中直接保存为pb为格式,保存pb的好处就是使用场景是实现创建模型与使用模型的解耦,使得创建模型与使用模型的解耦,使得前向推导inference代码统一。另外的好处就是保存为pb的时候,模型的变量会变成固定的,导致模型的大小会大大减小。

  .dat

  .dat并不是一种标准文件。DATA的意思,即数据文件,这类文件并没有进行绝对化的定义。

  在深度学习里指存放数据的文件。

  .h5即(.hdf5)

  HDF5是一种全新的分层数据格式产品,由数据格式规范和支持库实现组成。

  .ckpt

  这种模型文件是依赖 TensorFlow 的,只能在其框架下使用。

  checkpoint文件:用于告知某些TF函数,这是最新的检查点文件。

  .data文件:保存图中所有变量的值,没有结构。

  .index文件:保存索引。

  .meta文件:保存计算图的结构,但是不包含里面变量的值。

  3.预测

  介绍一个sklearn中高效的分析函数:classification_report ()

  使用:

  from sklearn.metrics import classification_report