利用Sklearn实现DataFrame数据的回归预测,以及对预测结果进行评价。

it2022-05-05  140

      最近在学习利用Python的Sklearn模块实现对数据的回归,分类,以及聚类任务,并分别对其结果进行指标分析。这一篇主要是总结对数据的回归预测,写这篇文章的主要目的是理顺思路,方便以后查找使用。

      对数据的回归预测,分为如下步骤:1、数据预处理;  2、选择合适的回归模型;  3、模型训练;  4、模型预测;  5、模型评估;6、根据评估结果,调整模型参数; 7、确定最优参数模型,保存模型;8、将预测模型应用于实际预测;  9、模型使用,数据收集,对模型进行更新微调。

      第一步,数据预处理。提到数据分析,那么首先是数据的处理,包括数据清洗,特征筛选,转化数据格式等,因为实际需求,我的数据都是以pandas模块中的Dataframe数据存储格式。以Sklearn中自带的数据为例,主要包括:

               1、    鸢尾花数据集:load_iris():用于分类任务的数据集。

               2、    手写数字数据集:load_digits():用于分类任务或者降维任务的数据集。

               3、    乳腺癌数据集load-barest-cancer():简单经典的用于二分类任务的数据集。

               4、    糖尿病数据集:load-diabetes():用于回归数据集。

               5、    波士顿房价数据集:load-boston():回归任务的数据集。

               6、   体能训练数据集:load-linnerud():多变量回归任务的数据集。。        对Sklearn中的数据集的导入主要分为三步:数据加载,将数据转化为DataFrame格式,数据分割(分为训练集,测试集)。

代码如下:

#加载数据集 from sklearn.datasets import load_breast_cancer import pandas as pd df = load_breast_cancer() #将数据转化为DataFrame df = pd.DataFrame(df.data, columns=df.feature_names) #数据分割,将数据的后百分之20作为测试集(-df.shape[0]//5为获取测试集的起始index) df_train = df.values[:-(df.shape[0]//5),:] df_test = df.values[-(df.shape[0]//5):,:] #将训练集与测试集分为特征X,预测Y X_train = df_train[:,:-1] Y_train = df_train[:,-1] X_test = df_test[:,:-1] Y_test = df_test[:,-1]

第二步,选择合适的回归模型。Sklearn中包含了丰富的回归模型供用户选择,包括但不限于:支持向量机(VSM)回归模型,决策树回归,以及由集成学习的随机森林和XGBoost(需要额外安装XGBoost模块),逻辑回归,梯度上升,神经网络。每个模型具体的调用格式可以自行查找。我以随机森林为例(随机森林效果较好,且对参数不是很敏感),调用格式为:

from sklearn.ensemble import RandomForestRegressor model = RandomForestRegressor()

其中 RandomForestRegressor中包含很多需要调整的参数,每个参数的具体作用和取值类型,利用 帮助文档【help(RandomForestRegressor)】即可得知。

第三步,模型训练。当确定了模型参数后,利用模型中自带的fit方法(sklea中fit方法基本对所有回归分类算法适用)进行训练,并且保存。

from sklearn.externals import joblib #joblib为模型存储的方法,path为模型的保存地址 model.fit(X_train, Y_train) joblib.dump(model, path)

第四步,模型预测。利用训练模型自带的predict()方法,进行预测,输出为格式跟Y_train相同的一列预测值Y_pred。

Y_pred = model.predict(X_test)

第五步,预测结果评价。回归的评价指标,我主要利用如下三个:

平均绝对误差(MAE)R2决定系数(r2_score)均方根误差差(RMSE)

在python中的调用方法为:

#平均绝对误差(MAE) from sklearn.metrics import mean_absolute_error # R2 决定系数(r2_score) from sklearn.metrics import r2_score  

第6步,第七步,第八步,第九步不做描述。模型调参方法在网上很容易找到。

由此,得到数据回归的整体流程:

#加载数据集 from sklearn.datasets import load_breast_cancer import pandas as pd import scipy as sp from sklearn.ensemble import RandomForestRegressor from sklearn.externals import joblib #平均绝对误差(MAE) from sklearn.metrics import mean_absolute_error # R2 决定系数(r2_score) from sklearn.metrics import r2_score #第一步,传入数据,分割数据。 df = load_breast_cancer() df = pd.DataFrame(df.data, columns=df.feature_names) df_train = df.values[:-(df.shape[0]//5),:] df_test = df.values[-(df.shape[0]//5):,:] X_train = df_train[:,:-1] Y_train = df_train[:,-1] X_test = df_test[:,:-1] Y_test = df_test[:,-1] #第二,三:选择模型,训练 path = "H:\新实验\VSM.model" model = RandomForestRegressor() model.fit(X_train,Y_train) joblib.dump(model,path) Y_pred = model.predict(X_test) #将预测结果,跟真实结果放在一起,存储。 out_pred = pd.DataFrame() out_pred["Y_test"] = Y_test out_pred["Y_pred"] = Y_pred #第四步,预测评价。将预测结果存为dict,最后转化为dataframe保存。 out_dict = {} MAE = mean_absolute_error(Y_test, Y_pred) MAE = round(MAE,3) MAE_list = [] MAE_list.append(MAE) out_dict["平均绝对误差(MAE)"] = MAE_list R2 = r2_score(Y_test, Y_pred) R2 = round(R2,3) R2_list = [] R2_list.append(R2) out_dict["R2 决定系数"] = R2_list RMSE = sp.sqrt(sp.mean((Y_test - Y_pred) ** 2)) RMSE = round(RMSE,3) RMSE_list = [] RMSE_list.append(RMSE) out_dict["均方根误差RMSE"] = RMSE_list out_Err = pd.DataFrame(out_dict) print(out_pred) print(out_Err) 上面代码的运行之后,我们得到了一个训练模型,用来后续的预测工作:

代码的运行结果(第一列为真实值,第二列为预测值),:

下面为预测结果评价,如果评价结果不理想,需要继续对模型参数进行调整。

 

第一次接触数据分析,也是第一次写博客。写的不正确的地方,请路过的大佬们指教,以便我继续提高,感谢。

 

 

 


最新回复(0)