sklearn一般流程
sklearn
机器学习的一般流程包括:
数据的获取
特征的提取
特征的选择
数据预处理
模型的训练
模型的评估
模型的优化
模型持久化
一,数据的获取
可以导入内部数据集,计算机生成的数据集,网络上的数据集,文件中的数据集等。
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
%matplotlib inline
from sklearn import datasets
iris = datasets.load_iris()
# 利用dataframe 做简单的可视化分析
df = pd.DataFrame(iris.data,columns = iris.feature_names)
df['target'] = iris.target
df.plot(figsize = (12,8))
二,数据预处理
预处理数据包括:数据的标准化,数据的归一化,数据的二值化,非线性转换,数据特征编码,处
理缺失值等。
from sklearn import preprocessing
scaler = preprocessing.MinMaxScaler() #MinMaxScaler将样本特征值线性缩放到0,1之间
scaler.fit(iris.data) #先fit
data = scaler.transform(iris.data) #再transform. 也可以二合一写成fit_transform
target = iris.target
三,模型的训练
根据问题特点选择适当的估计器
estimater
模型:分类
(SVC,KNN,LR,NaiveBayes,...)
回归 (Lasso,ElasticNet,SVR,...) 聚类
(KMeans,...)
降维
(PCA,...)
我们当前的问题是根据特征预测鸢尾花的类型,属于带标签的分类问题,并且
samples
个数为
150 个小于100K,
所以根据
sklearn
使用我们选择
Linear SVC
模型进行分类。
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)
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.get_params()
clf.C
clf.predict_proba(X_test)
#查看模型的得分
clf.score(X_test,y_test)
#对不同类型的模型有不同的评分算法,由score方法内部所定义
四,模型的评估
模型的评估和模型的优化相关功能在
sklearn.model_selection
中。
除了
使用
estimator
的
score
函数
简单粗略地评估模型的质量之外,
在
sklearn.metrics
模块
针对不同的问题类型提供了各种评估指标并且可以创建用户自定义的评估指
标。
可以采用
交叉验证方法
评估模型的泛化能力,能够有效避免过度拟合。
K
折交叉验证
(K=10)
示意图
# 分类模型评分报告
from sklearn.metrics import classification_report
print(classification_report(target,clf.predict(data),
target_names = iris.target_names))
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))
五,模型的优化
优化模型的方法包括 网格搜索法,随机搜索法,模型特定交叉验证,信息准则优化。
网格搜索法在指定的超参数空间中对每一种可能的情况进行交叉验证评分并选出最好的超参数组
合
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,scoring = scoring,cv = 10)
clf.fit(data,target) # 得到的clf是一个优化了的分类器
clf.predict(data) # 用优化了的分类器进行分类
print(clf.get_params()) #查看全部参数
print(clf.best_params_) #查看最优参数
clf.best_score_
六,模型持久化
可以使用
python
内置的
pickle
模块或将训练好模型保存到磁盘或字符串,以便将来直接使用,而不
需要重复训练。对于
sklearn,
使用
joblib
会更加有效,但是只能保存到磁盘而不能保存成字符串。
import pickle
s = pickle.dumps(clf) #保存模型成字符串
clf2 = pickle.loads(s) #从字符串加载模型
clf2.predict(data)
from sklearn.externals import joblib
joblib.dump(clf,'filename.pkl') #保存模型到文件
clf3 = joblib.load('filename.pkl') #加载模型
clf3.predict(data)