Python实现孤立森林(IForest)+SVR的组合预测模型

该博客探讨了在不考虑数据关联性且降噪数据未填补的情况下,对农田环境数据集进行预处理。首先,通过标准化处理数据,然后使用支持向量回归(SVR)模型进行预测,得到初始的EVS和R2分数。接着,利用Isolation Forest进行异常检测并去除噪声数据,再次应用SVR,但发现经过降噪后的模型表现反而下降。这表明数据集或未填补的缺失值可能对模型性能有影响。
摘要由CSDN通过智能技术生成

只讨论性能,不考虑关联性,降噪数据未填补。

1.引入数据集

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report
from sklearn.metrics import explained_variance_score
from sklearn.ensemble import RandomForestRegressor
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
import pandas as pd
import numpy as np
import time

from sklearn import metrics

import csv

data=[]
traffic_feature=[]
traffic_target=[]
csv_file = csv.reader(open('turang.csv'))
for content in csv_file:
    content=list(map(float,content))
    if len(content)!=0:
        data.append(content)
        traffic_feature.append(content[0:4])
        traffic_target.append(content[-1])

data=np.array(data)

traffic_feature=np.array(traffic_feature)
traffic_target=np.array(traffic_target)

df=pd.DataFrame(data=data,columns = ['土壤温度','空气湿度','空气温度','光照强度','土壤水分'])
df
土壤温度空气湿度空气温度光照强度土壤水分
037.7727.0039.9068150.999.88
137.8028.8340.0363989.969.85
237.8226.8240.2063039.889.78
337.9624.3339.9062988.959.77
437.7724.0339.6059670.049.80
..................
307828.5791.1717.23861.4728.30
307928.5290.9017.17861.5528.30
308028.5089.8017.15861.7628.28
308128.4986.7017.27861.9828.27
308228.4684.5017.43860.3228.28

3083 rows × 5 columns

2.标准化

scaler = StandardScaler() # 标准化转换
scaler.fit(traffic_feature)  # 训练标准化对象
traffic_feature= scaler.transform(traffic_feature)   # 转换数据集
feature_train,feature_test,target_train, target_test = train_test_split(traffic_feature,traffic_target,test_size=0.1,random_state=10)

3.SVR

from sklearn.svm import SVR
import matplotlib.pyplot as plt  
start1=time.time()
model_svr = SVR(C=1,epsilon=0.1,gamma=10)
model_svr.fit(feature_train,target_train)
predict_results1=model_svr.predict(feature_test)
end1=time.time()

SVRRESULT=predict_results1

plt.plot(target_test)#测试数组
plt.plot(predict_results1)#测试数组
plt.legend(['True','SVR'])
fig = plt.gcf()
fig.set_size_inches(18.5, 10.5)
plt.title("SVR")  # 标题
plt.show()
print("EVS:",explained_variance_score(target_test,predict_results1))
print("R2:",metrics.r2_score(target_test,predict_results1))
print("Time:",end1-start1)

EVS: 0.6563954626493961
R2: 0.6536622059850858
Time: 0.3603041172027588

4.引入IForest降噪

from sklearn.ensemble import IsolationForest

model_isof = IsolationForest()
outlier_label = model_isof.fit_predict(df)
# 将array 类型的标签数据转成 DataFrame
outlier_pd = pd.DataFrame(outlier_label, columns=['outlier_label'])
# 将标签数据与原来的数据合并
data_merge = pd.concat((df, outlier_pd), axis=1)
normal_source = data_merge[data_merge['outlier_label']==1]
normal_source

 5.测试效果

IF_traffic_feature=normal_source.values[:,[0,1,2,3]]
IF_traffic_target=normal_source.values[:,[4]]
scaler.fit(IF_traffic_feature)  # 训练标准化对象
IF_traffic_feature= scaler.transform(IF_traffic_feature)   # 转换数据集
feature_train,feature_test,target_train, target_test = train_test_split(IF_traffic_feature,IF_traffic_target,test_size=0.1,random_state=10)
from sklearn.svm import SVR
import matplotlib.pyplot as plt  
start1=time.time()
model_svr = SVR(C=1,epsilon=0.1,gamma=10)
model_svr.fit(feature_train,target_train)
predict_results1=model_svr.predict(feature_test)
end1=time.time()


plt.plot(target_test)#测试数组
plt.plot(predict_results1)#测试数组
plt.legend(['True','SVR'])
fig = plt.gcf()
fig.set_size_inches(18.5, 10.5)
plt.title("SVR")  # 标题
plt.show()
print("EVS:",explained_variance_score(target_test,predict_results1))
print("R2:",metrics.r2_score(target_test,predict_results1))
print("Time:",end1-start1)

EVS: 0.5487895968648998
R2: 0.5255880566754088
Time: 0.2094569206237793

效果不怎么样...可能是数据集或者未数据填补的原因。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值