使用太阳黑子数据集执行线性回归
Posted
技术标签:
【中文标题】使用太阳黑子数据集执行线性回归【英文标题】:Perform linear regression with sunspot dataset 【发布时间】:2021-01-28 07:28:09 【问题描述】:我正在尝试在 sunspost 数据集中使用 k 折验证执行线性回归。 在这个练习中,我需要将过去 10 年作为测试,并将其余的用于传输,进一步我应该使用 RMSE 测量模型的准确性。 此外,我需要测试从 1 到 24 的 k 值,以便确定更好的 k 值(更低的 RMSE) 但是,考虑到太阳黑子值未标准化,我认为 k 的 RMSE 值(范围从 -6 到 -1)非常奇怪,而我认为它应该接近 16。 (PS:对于以下脚本,我生成了 day_count 列,假设回归模型不接受日期值。)
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import cross_val_predict
from sklearn import linear_model
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from numpy import reshape
import datetime
import random
import sys
from sklearn.utils import shuffle
df= pd.read_csv("sunspots2.csv", sep =";")
import pandas as pd
df['Date'] = pd.to_datetime(df['Date'])
df = df.set_index(df['Date'])
df = df.sort_index()
# create train test partition
train = df['1979-01-31':'2009-12-31']
test = df['2010-01-01':]
print('Train Dataset:',train.shape)
print('Test Dataset:',test.shape)
X_train = np.array(train[["day_count"]])
X_test = np.array(test[["day_count"]])
y_train = np.array(train[["Sunspot"]])
y_test = np.array(test[["Sunspot"]])
from sklearn.linear_model import LinearRegression
# Create model
linreg = LinearRegression()
linreg.fit(X_train, y_train)
# Calculate our y hat (how our model performs against the test data held off)
y_hat_test = linreg.predict(X_test)
from sklearn.metrics import mean_squared_error, mean_absolute_error
# See our Squared Mean Error score and Root Mean Squared Error:
test_mse = mean_squared_error(y_test, y_hat_test)
test_rmse = np.sqrt(test_mse)
print(test_rmse)
# See our Mean Absolute Error
test_mae = mean_absolute_error(y_test, y_hat_test)
print(test_mae)
#See the RMSE values for each K (Rangin from 1 to 24)
from sklearn.model_selection import cross_val_score
lista_k = []
for i in list(range(27)):
if i > 2:
cv_4_results = cross_val_score(linreg, X_test, y_test, cv=i, scoring='neg_mean_squared_error')
lista_k.append(cv_4_results)
for a in lista_k:
print("Accuracy: %0.2f (+/- %0.2f)" % (a.mean(), a.std() * 2))
非常感谢大家!
【问题讨论】:
为 K 折交叉验证找到最佳 K 有点奇怪,所以我不确定你打算如何做到这一点。奇怪的 RMSE 可能是因为您将评分设置为“neg_mean_squared_error”,这与均方根误差不同。 嗨,Ivo!事实上,sklearn 以负值表示 RMSE.. 所以我认为这不是问题......因为我对 Iris 数据集重复了这个处理并且效果很好...... 计算“mean_squared_error”,然后使用np.sqrt()
确定。
【参考方案1】:
事实上,问题在于我之前已经准备好了日期,使用 shift 函数来适应我想要的 24 个延迟,然后再执行 k 折叠。
【讨论】:
以上是关于使用太阳黑子数据集执行线性回归的主要内容,如果未能解决你的问题,请参考以下文章