使用太阳黑子数据集执行线性回归

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 折叠。

【讨论】:

以上是关于使用太阳黑子数据集执行线性回归的主要内容,如果未能解决你的问题,请参考以下文章

使用线性回归识别手写阿拉伯数字mnist数据集

什么是线性回归方程?

PyTorch学习笔记 8. 实现线性回归模型

线性回归

PyTorch学习笔记 8. 实现线性回归模型

线性回归中的交叉验证