【Python】基于Python的机器学习回归:可视化、预测及预测结果保存(附代
码)
⽬录
0 ⼤⽆语事件
写在前⾯。
就在我写这篇⽂章的时候,我是直接套⽤之前⽂章的模板(就是把之前⽂章拷贝然后再改),结果没想到,拷贝后整混了然后等于我把之前的⽂章给改了。。我发布了才发现。。。然后之前随机森林的第⼆篇博客就这样被我改掉了。。。为了不丢⼈,我就给隐藏起来了
所以下⾯的有关随机森林的第⼆篇⽂章的链接进不去。。
然后最近⼜⽐较忙。。等稳定下来我把那篇给补⼀下。。
1 简介
其实……不太想写简介……
之前写了两篇关于机器学习(随机森林)的⽂章,反响还不错。然后前⼀段时间有⼀些⼩伙伴来问我关于预测的事情,我仔细回想了⼀下之前的⽂章我似乎没有把预测当成⼀个重要的任务(我在⼀定程度上陷⼊了误区),所以我赶紧(拖了好⼏个⽉)写下了这篇博客。
机器学习不⽤多说了,主要还是⽤来完成回归和分类任务。本篇的任务是对于离散数据的回归,基于由训练集训练好的模型,然后根据预测集的feature对预测集的target预测(反正说⽩了就是回归,纯回归)。
2 数据
之前写的那篇⽂章很多同学都求数据……所以为了写这次的⽂章,我特地做了⼀个550个样本,10个特征的数据集。
我存为.xlsx格式,下⾯的代码可以直接读取。
这个数据集⾥,⼀⾏是⼀个样本,前10个为特征(x1~x10),最后⼀个是⽬标变量。
在下⾯的代码中,我将会把这个样本数据集分割成三份,分别是训练集、测试集、预测集。训练集的任务就是训练出回归模型,所以⼀般来说训练集的样本数会⽐较多;测试集的任务是测试这个模型到底靠不靠谱,⼀般来说会⾃带target,因为是测试,所以样本数会少⼀点;预测集的任务就是你的需求
了,把你需要预测的feature输⼊数据集⾥(target输不输⼊⽆所谓)下⾯的代码就会跑出根据feature预测的结果。
3 代码
基本思想和我之前的两篇⽂章⼀样,我拿这之前两篇⽂章⾥的代码,花了⼀个多⼩时改了改。
import numpy as np
import matplotlib.pyplot as plt
import math
import xlrd
import xlsxwriter
import random
>>#1.读取数据部分>>
#载⼊数据并且打乱数据集
def load_data(TrainStartPo, TrainEndPo, TestStartPo, TestEndPo, PredStartPo, PredEndPo, FeatureNum, FilePath):# 训练样本起始⾏数、结束⾏数,测试样本起始⾏数、结束⾏数,预测样本起始⾏数、结束⾏数,特征数,excel⽂件路径
# 打开excel⽂件
workbook = xlrd.open_workbook(str(FilePath))# excel路径
sheet = workbook.sheet_by_name('Sheet1')# heet表
train =[]# 训练集
test =[]
pred =[]# 预测集
# 载⼊训练样本集
for load_train in range(TrainStartPo-1, TrainEndPo):
train.w_values(load_train))
# 载⼊测试样本集
for load_test in range(TestStartPo-1, TestEndPo):
test.w_values(load_test))
# 载⼊预测样本集
for load_pred in range(PredStartPo-1, PredEndPo):
pred.w_values(load_pred))
#变换样本集
TrainSet = np.array(train)
TestSet = np.array(test)
PredSet = np.array(pred)
#分割特征与⽬标变量
x1 , y1 = TrainSet[:,:FeatureNum], TrainSet[:,-1]
x2 , y2 = TestSet[:,:FeatureNum], TestSet[:,-1]
x3 , y3 = PredSet[:,:FeatureNum], PredSet[:,-1]
return x1 , y1 , x2 , y2, x3, y3
>>#2.回归和显⽰部分>>
def regression_method(model, x_train, y_train, x_test, y_test, x_pred):    model.fit(x_train, y_train)# 使⽤训练集训练样本
score = model.score(x_test, y_test)
result = model.predict(x_test)
pred = model.predict(x_pred)
>##计算模型参数>##
ResidualSquare =(result - y_test)**2#计算残差平⽅
MSE = np.mean(ResidualSquare)#计算均⽅差
RSS =sum(ResidualSquare)#计算残差平⽅和
# print(f'R^2={score}')
# print(f'MSE={MSE}')
# print(f'RSS={RSS}')
>>##绘图>>#
plt.figure(1, figsize=(16,8))
# ⼦图1
plt.subplot(121)
plt.plot(np.arange(len(result)), y_test,'go-', label='test value')
plt.plot(np.arange(len(result)), result,'ro-', label='predict value')
plt.legend()# 将样例显⽰出来
# ⼦图2
plt.subplot(122)
plt.plot(np.arange(len(pred)), pred,'bo-', label='predict value')
>>>###
plt.suptitle(f'R^2 = {score}\nMSE = {MSE}\nRSS = {RSS}')
plt.show()
return pred
>>3.写⼊预测值>###
def write_predict(x_pred, pred, OutPut):
workbook = xlsxwriter.Workbook(str(OutPut))# 保存地址
worksheet = workbook.add_worksheet('Sheet1')
for i in range(len(x_pred)):
for j in range(len(x_pred[0])):
worksheet.write(i , j, x_pred[i][j])# 写⼊预测样本
worksheet.write(i, j+1, pred[i])# 写⼊预测值
workbook.close()
print('数据写⼊完成')
>>#4.预设回归⽅法>>
####4.1决策树回归####
from sklearn import tree
model_DecisionTreeRegressor = tree.DecisionTreeRegressor()
####4.2线性回归####
from sklearn import linear_model
model_LinearRegression = linear_model.LinearRegression()
####4.3SVM回归####
from sklearn import svm
model_SVR = svm.SVR()
####4.4KNN回归####
from sklearn import neighbors
model_KNeighborsRegressor = neighbors.KNeighborsRegressor()
####4.5随机森林回归####
python新手代码图案如何保存
from sklearn import ensemble
model_RandomForestRegressor = ensemble.RandomForestRegressor(n_estimators=20)#这⾥使⽤20个决策树
####4.6Adaboost回归####
from sklearn import ensemble
model_AdaBoostRegressor = ensemble.AdaBoostRegressor(n_estimators=50)#这⾥使⽤50个决策树
####4.7GBRT回归####
from sklearn import ensemble
model_GradientBoostingRegressor = ensemble.GradientBoostingRegressor(n_estimators=100)#这⾥使⽤100个决策树
####4.8Bagging回归####
semble import BaggingRegressor
model_BaggingRegressor = BaggingRegressor()
####4.9ExtraTree极端随机树回归####
import ExtraTreeRegressor
model_ExtraTreeRegressor = ExtraTreeRegressor()
>###5.设置参数与执⾏部分>>###
#设置数据参数部分
method = model_RandomForestRegressor  # 选择⽅法
trains =[2,501]# 训练集起始结束⾏
tests =[502,531]# 测试集起始结束⾏
preds =[532,551]# 预测集起始结束⾏
features =10# 特征数
path =r'\ML Data.xlsx'# 样本数据集读取路径
output =r'\ML Results.xlsx'# 预测数据集保存路径
x_train, y_train, x_test, y_test, x_pred, y_pred = load_data(trains[0], trains[1], tests[0], tests[1], preds[0], preds[1], features, path)#⾏数以excel⾥为准pred = regression_method(method, x_train, y_train, x_test, y_test, x_pred)#括号内填上⽅法,并获取预测值
write_predict(x_pred, pred, output)
代码就不多解释了,都在注释⾥。在运⾏的时候把“5.设置参数与执⾏部分”⾥的那些什么method啊、trains啊、tests、preds啊什么的都填上,缺⼀不可奥。
我上⾯写的代码默认是⽤随机森林回归,把excel表⾥的2到501⾏数据(共500个样本)当作训练集、502到531⾏数据(共30个样本)当作测试集、532到551⾏数据(共20个样本)当作预测集,可以根据需要⾃⼰调整。
4 效果
根据上⾯的代码运⾏会出现⼀张图,然后在你output写的路径下保存⼀个xlsx⽂件。
⾸先我这⾥图长这样。
然后保存的结果。
上⾯图⾥显⽰R2有0.98+,所以我这⾥把我的预测集原来的target和随机森林预测的target拷贝到⼀个表⾥简单对⽐⼀下。
⼤家把效果拔四个字打在公屏上!
5 关于数据获取
这篇⽂章⽤到的样本集数据获取本来是免费的,但是因为联系我的太多了(⽽且并没有⼈打赏),所以我打算有偿获取(收点费⽤意思⼀下,5元以上)。需要的⼩伙伴们可以联系我邮箱(chinshuuichi
@qq)并且贴上打赏付款证明(码在下⾯),我看到后就会发送数据。
另外我及不及时回复⽐较随缘了,我尽量⼀天看⼀次邮箱。
(我的乞讨码在下⾯)~
-----------------------分割线(以下是乞讨内容)-----------------------

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论