1、pca降维:目的是提升模型训练速度
- 定义:
- 使用方法:给训练数据或者测试数据进行降维处理
- 给训练数据降维
- 给测试数据降维:这里1就要用transform,而不是fit_transform,因为之前训练数据降维时特征已经确定,测试数据提取的特征要和训练数据保持一致。
2、交叉验证:目的是保证模型的测试数据和训练数据划分清楚,从而对比选出得分最高的模型,保证数据划分的稳定性,而不是之前随机划分。
- 概念:每次进行数据划分都是随机的,所以没法保证稳定的模型精确度
- 方法一:k折交叉验证(将所有数据划分成k份,每次训练用1/k作为测试数据,其余数据作为训练数据),使用方式是先通过sklearn库中的model_selection导入KFold,然后设定好KFold的n_splits参数,之后通过模型的split方法划分训练数据和测试数据,返回的是一个生成器,其中会按照数据的下标划分好数据,使用时可以通过数组索引的方式(数组[数组])。注意:返回给你的数据有k份,每一份数据都是取其中1/k作为测试数据,其余数据作为训练数据,且每份数据都是所有数据的下标。
- 方法二:StratifiedKFold(分层KFold):相对于方法一,挑着分,分的更细了,使用方法类似K折交叉验证。注意:返回给你的数据有k份,每一份数据都是取其中1/k作为测试数据,其余数据作为训练数据,且每份数据都是所有数据的下标。
- 应用示例
from sklearn.model_selection import KFold
from sklearn.model_selection import StratifiedKFold
kf = KFold(n_splits=5)
st = StratifiedKFold(n_splits=5)
iterable_kf = kf.split(Date,Target)
iterable_st = st.split(Date,Target)
for train_index, test_index in st_iterable:x_train = Date[train_index] y_train = Target[train_index]x_test = Date[test_index]y_test = Target[test_index]···
3、网格交叉验证:GridSearchCV存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数
- 举例:SVM模型选择最优惩罚因子C和最优高斯核函数对应的参数gamma(gamma参数只有核函数为高斯时才有)
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
data, target = load_iris(return_X_y=True)
'''
网格交叉验证参数说明:
estimator:模型对象,不需要带参数,只需要输入模型对象即可
param_grid:网格参数,通过字典形式(键为模型参数名字符串,值为可能的数值列表)输入,每个参数需要提供多个值,会选择最优组合
n_job:多进程,-1表示适用所有处理器CPU
cv:默认分成5份,分的方法类似k折交叉验证,属于内部操作
'''
svc = SVC()
param_grid = {'C':[0.1, 1,10,15],'gamma':[0.01,0.05,0.1,0.5,1]
}
gv = GridSearchCV(estimator=svc,param_grid=param_grid,n_jobs=-1,cv=5)
gv.fit(data,target)
gv.best_score_,gv.best_params_,gv.best_estimator_