使用不同的回归模型进行预测,对特征预测。
给出模型预测分数。
from math import sqrt
import matplotlib.pyplot as plt
from numpy import split
from numpy import array
from pandas import read_csv
from sklearn.metrics import mean_squared_error
from matplotlib import pyplot
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import Lasso
from sklearn.linear_model import Ridge
from sklearn.linear_model import ElasticNet
from sklearn.linear_model import HuberRegressor
from sklearn.linear_model import Lars
from sklearn.linear_model import LassoLars
from sklearn.linear_model import PassiveAggressiveRegressor
from sklearn.linear_model import RANSACRegressor
from sklearn.linear_model import SGDRegressor
import pandas as pd
from sklearn.model_selection import train_test_split
import numpy as np
from sklearn.metrics import r2_score
models_name=['lr','lasso','ridge','en','huber','llars','Lars','pa']
def get_models(models=dict()):
models['lr'] = LinearRegression(fit_intercept=True, normalize=True, copy_X=True, n_jobs=None)
models['lasso'] = Lasso(fit_intercept=True, normalize=True, copy_X=True)
models['ridge'] = Ridge(fit_intercept=True, normalize=True, copy_X=True)
models['en'] = ElasticNet(fit_intercept=True, normalize=True, copy_X=True)
models['huber'] = HuberRegressor(max_iter=10000)
models['llars'] = LassoLars(fit_intercept=True, copy_X=True, normalize=True)
models['Lars'] = Lars()
models['pa'] = PassiveAggressiveRegressor(max_iter=10000, tol=1e-3)
print('Defined %d models' % len(models))
return models
#读取数据
data = pd.read_csv('data/data3.csv')
#x—特征
X = data[['jiaohua', 'shaojie', 'liantie','yelian','jinglian','lianzhu','zhagang','qita','feitie','feigang','dianji','baiyunshi']]
#y-标签
y = data['jieguo']
#分割数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=123)
y_train =np.array(y_train)
y_test =np.array(y_test)
models = get_models()
days = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
y_yuce=[]
pyplot.plot(days, y, marker='o', label="Ture")
y = array(y)
# y_test_score = (y_test[0]+y_test[1]+y_test[2])/3
score_num = []
for name,model in models.items():
model.fit(X_train, y_train)
y_pred = model.predict(X)
# # y_pred_score = (y_pred[0]+y_pred[1]+y_pred[2])/3
# score = y_pred_score-y_test_score
score = r2_score(y,y_pred,sample_weight=None, multioutput='uniform_average')
score_num.append(score)
print("%s模型的分数:%f"%(name,score))
pyplot.plot(days, y_pred, marker='o', label=name)
pyplot.legend()
pyplot.show()
for i,num in enumerate(score_num):
plt.plot(models_name[i],num,label = models_name[i], marker='o')
pyplot.legend()
pyplot.show()