PM2.5预测(李宏毅机器学习hw1)

本文介绍了一种基于李宏毅机器学习课程的PM2.5预测模型,使用前8小时PM2.5数据预测第9小时数值。通过数据预处理,采用sklearn库中的岭回归算法进行训练和测试,展示了训练和测试集的误差分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PM2.5预测(李宏毅机器学习hw1)

通过前8个小时PM2.5的值预测9个小时的PM2.5的值

直到做完我才发现原题是根据前9个小时预测第10个小时的值。不过原理都是一样的。

首先,给定的数据有训练集和测试集

训练集数据:

格式:

前三列是时间,测站,所测项目,之后按照序号分别是0时,1时,2时,…,23时的各个项目指标

在这里插入图片描述

测试集数据:

格式:9个小时的项目数据
在这里插入图片描述

数据处理

取前8个小时PM2.5数据放到x_data中,第9个小时的数据放到y_data中。

# 特征值 pm2.5 前8个小时的pm2.5的值
train_x_data = []

# 第9个小时的pm2.5值
train_y_data = []

filename = 'trainingData/train.csv'

with open(filename, encoding='utf-8') as f:
    reader = csv.reader(f)
    ls = list(reader)

    k = 0
    for i in tqdm(range(10, len(ls), 18)):
        k += 1
        # print(str(k) + ' ' + ls[i][2])

        for j in range(3, 19):
            # print(ls[i][j:j+8])
            train_x_data.append(ls[i][j:j+8])
            # print(ls[i][j+8])
            train_y_data.append(ls[i][j+8])


train_x_data = np.array(train_x_data, float)
train_y_data = np.array(train_y_data, float)

np.savetxt("trainingData/xData_pm25.csv", train_x_data, fmt='%.1f', delimiter=",")
np.savetxt("trainingData/yData_pm25.csv", train_y_data, fmt='%.1f', delimiter=",")

# 测试数据处理

testData = 'testingData/'

test_x_data = []
test_y_data = []
with open(testData+'test.csv', encoding="GBK") as f:
    reader = csv.reader(f)
    ls = list(reader)
    k = 0
    for i in tqdm(range(9, len(ls), 18)):
        k += 1
        test_x_data.append(ls[i][2:10])
        test_y_data.append(ls[i][10])

test_x_data = np.array(test_x_data, float)
test_y_data = np.array(test_y_data, float)

print(test_x_data.shape)
print(test_y_data.shape)

np.savetxt(testData+"xData_pm25.csv", test_x_data, fmt='%.1f', delimiter=",")
np.savetxt(testData+"yData_pm25.csv", test_y_data, fmt='%.1f', delimiter=",")

采用sklearn岭回归拟合

trainingData = 'trainingData/'

x_data = []

y_data = []
# 加载训练数据
np.loadtxt(open(trainingData+'xData.csv'), delimiter=",",skiprows=0)

with open(trainingData+'xData_pm25.csv', encoding='utf-8') as f:
    x_data = np.loadtxt(f, delimiter=",")

with open(trainingData+'yData_pm25.csv') as f:
    y_data = np.loadtxt(f, delimiter=",")
    
    
# 使用广义交叉验证 拟合得到最优alpha参数 = 898.21
# regs = linear_model.RidgeCV(np.linspace(1,1000))
# regs.fit(x_data, y_data)
#
# alpha = regs.alpha_

# 拟合数据
reg = linear_model.Ridge(alpha=898.21)
reg.fit(x_data, y_data)

test_x_data = []

test_y_data = []

testingData = 'testingData/'

# 加载测试集
with open(testingData+'xData_pm25.csv', encoding='utf-8') as f:
    test_x_data = np.loadtxt(f, delimiter=",")

with open(testingData+'yData_pm25.csv') as f:
    test_y_data = np.loadtxt(f, delimiter=",")

pre_y_data = reg.predict(x_data)

# 求得误差
err = abs(pre_y_data - y_data)

plt.plot(np.linspace(1, len(err), len(err)), err)
plt.xlabel(r'$trainingIndex$', fontsize=16)
plt.ylabel(r'$error$', fontsize=16)
plt.title('abs trainingError')
plt.show()

print(err.sum(axis=0)/len(err)*1.0)

训练集误差

在这里插入图片描述

训练集误差(经取绝对值)

在这里插入图片描述

平均误差

在这里插入图片描述

测试集误差

在这里插入图片描述

测试集误差(经取绝对值)

在这里插入图片描述

平均误差

在这里插入图片描述

源码地址:https://github.com/ChangJiahong/hw1

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值