用Scikit-Learn完成机器学习任务

Scikit-learn,简称sklearn,是一个非常完整的机器学习库。虽然当前的版本号还是0.1X(2018年底最新版本为0.20),它所能提供的数据处理、机器学习的功能已经非常之丰富,几乎涵盖了做机器学习整个过程的一切流程。

sklearn中机器学习的基本要素

样本 Sample, Data

feature

label, class, response

模型 estimator

estimator指的是算法模型,比如classifier、regression estimator、cluster estimator、transformer。 其中transformer比较特殊,它不是监督或非监督学习算法,而是进行数据特征清洗、数据特征降维、数据扩展(核估计)、特征提取。

transformer

fit_transform 函数

transform函数

classifier

fit 操作

fit(X, y)方法总是接受数据的feature向量和类别label。 对于无监督学习,可以没有label。

predict 操作

predict(T)方法总是接受一个新的feature向量。

超参 parameter

模型指标 Metric

>>> import numpy as np
>>> from sklearn import metrics
>>> y = np.array([1, 1, 2, 2])
>>> pred = np.array([0.1, 0.4, 0.35, 0.8])
>>> fpr, tpr, thresholds = metrics.roc_curve(y, pred, pos_label=2)
>>> metrics.auc(fpr, tpr)

预处理操作 Preprocessing

transform 操作

数据格式

svmlight / libsvm format

This format is a text-based format, with one sample per line. It does not store zero valued features hence is suitable for sparse dataset.

The first element of each line can be used to store a target variable to predict.

      1 101:1.2 102:0.03
      0 1:2.1 10001:300 10002:400
      0 0:1.3 1:0.3
      1 0:0.01 1:0.3
      0 0:0.2 1:0.3

详见https://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html#/Q3%3a_Data_preparation

sklearn做机器学习的一般流程

引入feature和label集 train_test_split拆分训练集和测试集 fit方法 predict方法 accuracy_score评估测试结果 将模型持久化保存 using Python’s built-in persistence model, namely pickle。

Pipeline

pipeline可以用来把多个estimator串起来合成一个条流水线。这样,整个流程里我们只需要对数据调用一次fit和一次predict,GridSearchCV自动调参也是一次。

pipe中的最后一个estimator可以是transformer, classifier。之前的estimator必须是transformer。

sklearn解决机器学习问题

回归预测问题 Regression

线性回归 LinearRegression这个名字已经说明了是X->y的1次函数,所以自然的X向量的纬度是多少,所求的参数个数也就是多少。

>>> from sklearn import linear_model   //导入库
>>> regr = linear_model.LinearRegression()   //  指明算法模型是一个对象
>>> regr.fit(X_train, y_train)   // 用训练数据进行模型训练
>>> regr.coef_   // 训练之后模型所计算出的方程参数
>>> regr.score(X_test, y_test))   // 用测试数据已知X和y进行测评
>>> regr.predict(X_unknown)  //  满意的话以后就可以用这个模型进行预测给X让计算出y来

分类预测问题 Classification

SVM

>>> classifier = svm.SVC(gamma=0.001)
>>> classifier.fit(train_X, train_y)
>>> classifier.decision_function(np.c_[X1.ravel(), X2.ravel()])
>>> classifier.predict(new_X)

聚类问题 Clustering

Kmeans 输入是若干个抽象空间的坐标点位置。输出是这些点的标签。

>>> import sklearn  #引入库
>>> kmeans = sklearn.cluster.KMeans(n_clusters=cluster_num, n_init=10) #算法模型
>>> kmeans.fit(train_data)  #训练
>>> labels = kmeans.labels_   #输出聚类标签
>>> cluster = kmeans.predict(new_data) #用这个模型进行聚类

DBSCAN fit方法进行聚类。fit_predict方法进行新数据类别结果预测。

>>> from sklearn.cluster import DBSCAN
>>> import numpy as np
>>> X = np.array([[1, 2], [2, 2], [2, 3],
...               [8, 7], [8, 8], [25, 80]])
>>> clustering = DBSCAN(eps=3, min_samples=2).fit(X)
>>> clustering.labels_
array([ 0,  0,  0,  1,  1, -1])
>>> clustering
DBSCAN(eps=3, min_samples=2)

API 索引

https://scikit-learn.org/stable/modules/classes.html

*****
Written by Lu.dev on 28 August 2017