sklearn一般流程

sklearn

Key_Word

数据获取: sklearn, datasets, DataFrame, load_*

数据标准化: preprocessing, MinMaxScaler, scaler, fit, transform, data, target

划分测试集: model_selection, train_test_split, test_size

训练模型: fit ,predict, kernel="linear"probability=True

模型评估: score, predict_proba

使用metrics模块评估: classification_report

使用交叉验证方法评估: cross_val_score

模型的优化: GridSearchCV, C, kernel, gamma, param_grid, svc, cv

模型持久化: pikle, joblib, dump, load

sklearn数据获取

# In[1]:
import sklearn

# In[2]:
sklearn.__version__

# In[6]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
get_ipython().run_line_magic('matplotlib', 'inline')
#在jupyter中可视化的展示图形
from sklearn import datasets    #从sklearn导入数据集

iris = datasets.load_iris()


# In[10]:
iris
iris.data
iris['target']


# In[17]:
# 利用dataframe做简单的可视化分析
df = pd.DataFrame(iris.data, columns = iris.feature_names)    # 是一个表格 
df['target'] = iris.target    # 表头字段就是key
df.plot(figsize = (12, 8))

数据的预处理

数据的标准化: 将每一个数值调整到某一个数量级下

from sklearn import preprocessing
# sklearn的数据标准化都在preprocessing下

数据的归一化

数据的二值化

非线性转换

数据特征编码

处理缺失值

数据标准化

Key_Word

preprocessing, MinMaxScaler, scaler, fit, transform, data, target

from sklearn import preprocessing
scaler = preprocessing.MinMaxScaler()    # scaler: 定标器  
# MinMaxScaler将样本特征值线性缩放到0,1之间
scaler.fit(iris.data)    # 先fit
data = scaler.transform(iris.data)    # 再transform    也可以二合一写成fit_transform
target = iris.target

模型选择

带标签的属于分类问题, 样本数量为150小于100K, 选择Linear SVC模型进行分类

模型训练

Key_Word

划分测试集: model_selection, train_test_split, test_size

训练模型: fit ,predict, kernel="linear", probability=True

模型评估: score, predict_proba

划分测试集与训练集

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(data, target, test_size = 1/3)
# train_test_split(数据集, 目标集, 将多少数据划分成测试集)
len(X_train), len(X_test)

导入并训练模型

from sklearn import svm    # 导入支持向量机
clf = svm.SVC(kernel = "linear", C = 1, probability = True)    # 创建一个线性支持向量机的模型
clf.fit(X_train, y_train)    # 导入训练集与训练集的标签
clf.predict(X_test) - y_test    # 检验预测结果

查看模型参数

clf.C    # 查看模型 的某一个参数,用点语法
clf.get_params()    # 参看模型的所有参数

查看预测结果

clf.predict_proba(X_test)    # 测试集落在3个label上的概率
clf.score(X_test, y_test)    # 查看模型得分

模型的评估

Key_Word

使用metrics模块评估: classification_report

使用交叉验证方法评估: cross_val_score

1.在sklearn.metrics模块针对不同问题类型提供了各种评估指标并且可以创建用户自定义的评估指标

from sklearn.metrics import classification_report
print(classification_report(target, clf.predict(data), 
                            target_names = iris.target_names))

2.可以采用交叉验证方法评估模型的泛化能力

from sklearn.model_selection import cross_val_score
scores = cross_val_score(clf, data, target, cv=5)  # 采用5折交叉验证
print(scores)
# 平均得分和95%的置信区间
print("Accuracy: %0.2f(+/-%0.2f)"%(scores.mean(), scores.std()*2))
# 95%的置信区间在平均值两倍标准差之内

K折交叉验证(K=10)示意图

 模型的优化

网格搜索法: 在指定的超参数空间中对每一种可能的情况进行交叉验证评分并选出最好的超参数

  就是暴力枚举超参数空间中所有可能出现的超参数,

  然后生成所有的模型,

  之后使用交叉验证去评分每一种模型

  选出最好的超参数组合

随机搜索法

模型特定交叉验证

信息准则优化

Key_Word

模型的优化: GridSearchCV, C, kernel, gamma, param_grid, svc, cv

from sklearn import svm
from sklearn.model_selection import GridSearchCV
# 估计器
svc = svm.SVC()
# 超参数空间
param_grid = [{'C': [0.1, 1, 10, 100, 1000], 'kernel':['linear',]},
             {'C': [0.1, 1, 10, 100, 1000], 'gamma':[0.001, 0.01], "kernel":['rbf',]},
             ]
# 打分函数
scoring = 'accuracy'
# 指定采样方法
clf = GridSearchCV(svc, param_grid = param_grid, scoring = scoring, cv = 10)
clf.fit(data, target)    # 得到的clf是一个优化了的分类器
clf.predict(data)    # 用优化了的分类器进行分类
print(clf.get_params())    # 查看全部参数
print(clf.best_params_)    # 查看最优参数

clf.best_score_

模型持久化

Key_Word

模型持久化: pikle, joblib, dump, load

使用pickle模块保存模型

对于sklearn, 使用joblib会更有效

import pickle
s = pickle.dumps(clf) # 保存模型成字符串
clf2 = pickle.loads(s)    # 从字符串加载模型
from sklearn.externals import joblib
joblib.dump(clf, 'filename.pkl')    # 保存模型到文件
clf3 = joblib.load('filename.pkl')    #加载模型
原文地址:https://www.cnblogs.com/draven123/p/11408086.html