机器学习在预测方面的应用,根据预测值变量的类型可以分为分类问题(预测值是离散型)和回归问题(预测值是连续型),前面我们介绍了机器学习建模处理了分类问题(具体见之前的文章),接下来我们以波斯顿房价数据集为例,做一个回归预测系列的建模文章。
实现功能:
使用sklearn提供的支持向量机回归(SVR)的API对波士顿房价数据集进行预测,并尝试将预测结果进行分析。
实现代码:
from sklearn.datasets import load_boston import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn import preprocessing from sklearn.model_selection import cross_val_score from sklearn import metrics from sklearn.svm import SVR # 辅助函数 def cross_val(model,X,Y): pred = cross_val_score(model, X, Y, cv=10) return pred.mean() def print_evaluate(true, predicted): mae = metrics.mean_absolute_error(true, predicted) mse = metrics.mean_squared_error(true, predicted) rmse = np.sqrt(metrics.mean_squared_error(true, predicted)) r2_square = metrics.r2_score(true, predicted) print('MAE:', mae) print('MSE:', mse) print('RMSE:', rmse) print('R2 Square', r2_square) print('__________________________________') # 加载数据集 boston=load_boston() df=pd.DataFrame(boston.data,columns=boston.feature_names) df['target']=boston.target #查看数据项 features=df[boston.feature_names] target=df['target'] #数据归一化处理 min_max_scaler = preprocessing.MinMaxScaler() features = min_max_scaler.fit_transform(features) #数据集划分 split_num=int(len(features)*0.8) X_train=features[:split_num] Y_train=target[:split_num] X_test=features[split_num:] Y_test=target[split_num:] #支持向量机建模 svm_reg = SVR(kernel='rbf', C=30, epsilon=0.01) print(cross_val(svm_reg,X_train, Y_train)) svm_reg.fit(X_train, Y_train) test_pred = svm_reg.predict(X_test) train_pred = svm_reg.predict(X_train) print('Test set evaluation:\n_____________________________________') print_evaluate(Y_test, test_pred) print('Train set evaluation:\n_____________________________________') print_evaluate(Y_train, train_pred) # 可视化部分 sns.set(font_scale=1.2) plt.rcParams['font.sans-serif']='SimHei' plt.rcParams['axes.unicode_minus']=False plt.rc('font',size=14) plt.plot(list(range(0,len(X_test))),Y_test,marker='o') plt.plot(list(range(0,len(X_test))),test_pred,marker='*') plt.legend(['真实值','预测值']) plt.title('Boston房价支持向量机预测值与真实值的对比') plt.show()
实现效果:
关注V订阅号:数据杂坛,即可在后台联系我获取相关数据集和源码,送有关数据分析、数据挖掘、机器学习、深度学习相关的电子书籍。