李宏毅机器学习PM2.5作业

使用pyCharm2022.2.1版本,python10.0
python也不会,计算机也不会,啥都不会,只带了个脑子考了计算机研究生。研究生选了人工智能方向。看来注定是漫长的学习之旅。

PM2.5作业,我是一个字都看不懂。所以我采用了直接看答案的方案。把答案看懂也是一种本事。

把答案CV上来。

文章目录

  • 前言
  • 一、pandas是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.提取TEST数据集
    • 3.提取特征值
    • 3.归一化
  • 总结

前言

—李宏毅机器学习PM2.5作业

一、pandas是什么?

pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、使用步骤

1.引入库

代码如下:

import sys
import pandas as pd
import numpy as np  #环境,就不说了。ananconda真的难装。

2.提取TEST数据集

代码如下:

data = pd.read_csv('work/hw1_data/train.csv', encoding = 'big5')#读取文件数据
print(data)
data = data.iloc[:, 3:]  #iloc是对表格式数据使用的一个函数 loc用的是表格索引,iloc用的是表格行列号,
# 此处取的就是所有行和第三列之后的所有列。作用就是只留数据不留前面的杂项。data[data == 'NR'] = 0  #将所有数据里的NR全部置换为0.NR肯定无法参与运算,换成0让他不起作用。
print(data)
raw_data = data.to_numpy()#表格转换为numpy矩阵month_data = {}  #创建存放每月数据的数组
for month in range(12):sample = np.empty([18, 480])     #empty创建一个数组,但是元素不一定为0,可能为随机值。for day in range(20):sample[:, day * 24 : (day + 1) * 24] = raw_data[18 * (20 * month + day) : 18 * (20 * month + day + 1), :]month_data[month] = sample####等于创建了12个二维数组。每个数组是平起来的整个月份每天的数据

3.提取特征值

代码如下:

# 这里作业要求用前九天的数据来预测第十天数据,因此将每九天的数据变为一行,作为特征值。
x = np.empty([12 * 471, 18 * 9], dtype = float)  #471是如何来的?这里是每九个小时一个数据,但并不是用过的就不用了。而是第一个数据0到8,第二个数据1到9,这个样子。最后9天因为找不到第十天的数据所以舍去,就是20*24-9=471.
y = np.empty([12 * 471, 1], dtype = float)
for month in range(12):for day in range(20):for hour in range(24):if day == 19 and hour > 14:    #舍去每月最后九小时。continuex[month * 471 + day * 24 + hour, :] = month_data[month][:,day * 24 + hour : day * 24 + hour + 9].reshape(1, -1) #vector dim:18*9 (9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9)#reshape(1,-1)可以转换为一行.这里把9列(9个小时)的18维数据融为一行。y[month * 471 + day * 24 + hour, 0] = month_data[month][9, day * 24 + hour + 9]   #value  为啥是9小时后的PM2.5
print('x',x)
print(y)
#因为这里作业要求使用9个小时的PM2.5来预测第十个小时的PM2.5的值,因此数据集进行了这样的划分,Y即为target,记录了每九个小时后第十个小时的PM2.5值

3.归一化

代码如下:

mean_x = np.mean(x, axis = 0) #18 * 9
std_x = np.std(x, axis = 0) #18 * 9###计算总体标准偏差。
for i in range(len(x)): #12 * 471for j in range(len(x[0])): #18 * 9if std_x[j] != 0:x[i][j] = (x[i][j] - mean_x[j]) / std_x[j]
##对于所有的数据,如果这一列的标准偏差不为0(实际上好像也不存在为0的,可能每一列都是NR的那个是0?),应该是为了严谨。对于每一个数据都要减去均值后除以标准差,完成归一化。
#这里是中心化和标准化处理,通过处理,得到了均值为0,标准差为1的服从正态分布的数据。可以使一些原来数据大小、量纲不同的数据,对结果的影响趋向一致。

import math
x_train_set = x[: math.floor(len(x) * 0.8), :]
y_train_set = y[: math.floor(len(y) * 0.8), :]
x_validation = x[math.floor(len(x) * 0.8): , :]
y_validation = y[math.floor(len(y) * 0.8): , :]
print(x_train_set)
print(y_train_set)
print(x_validation)
print(y_validation)
print(len(x_train_set))
print(len(y_train_set))
print(len(x_validation))
print(len(y_validation))
#好像保留了20%的数据,自己做测试用。虽然说有test数据集,但是自己还是需要自己的test数据集。
##深度学习
dim = 18 * 9 + 1
w = np.zeros([dim, 1])
x = np.concatenate((np.ones([12 * 471, 1]), x), axis = 1).astype(float)###axis=1 表示对应行拼接。
learning_rate = 100
iter_time = 1000
adagrad = np.zeros([dim, 1])
eps = 0.0000000001
for t in range(iter_time):loss = np.sqrt(np.sum(np.power(np.dot(x, w) - y, 2))/471/12)#rmseif(t%100==0):print(str(t) + ":" + str(loss))gradient = 2 * np.dot(x.transpose(), np.dot(x, w) - y) #dim*1adagrad += gradient ** 2w = w - learning_rate * gradient / np.sqrt(adagrad + eps)
np.save('work/weight.npy', w)#保存文件
print(w)
#这一步真的很难。dim加了1,起到的作用是Y=wX+b中b的作用。


loss是最常见的均方根误差函数,除了一个478*12,应该是平均的。这个除不除感觉对结果影响不大的样子。
梯度下降用的是adagrad方法,就是要除以之前所有梯度的均方和。
eps是为了防止分母为0
这个学习速率和初始值如何设置,目前还不是很了解。可能还需要学习后面的课程。
代码如下:

#测试
testdata = pd.read_csv('work/hw1_data/test.csv', header = None, encoding = 'big5')  #读文件。
test_data = testdata.iloc[:, 2:]           #不要前两列的表项
test_data[test_data == 'NR'] = 0             #NR设为0
test_data = test_data.to_numpy()
test_x = np.empty([240, 18*9], dtype = float)     #创建测试矩阵
for i in range(240):test_x[i, :] = test_data[18 * i: 18* (i + 1), :].reshape(1, -1)       #可以仿照训练集看变化
print('1',len(test_x))
print('2',len(test_x[0]))
for i in range(len(test_x)):for j in range(len(test_x[0])):if std_x[j] != 0:test_x[i][j] = (test_x[i][j] - mean_x[j]) / std_x[j]
test_x = np.concatenate((np.ones([240, 1]), test_x), axis = 1).astype(float)#拼接与b相乘的常数项。
test_x
w = np.load('work/weight.npy')
ans_y = np.dot(test_x, w)
print('ans',ans_y)
import csv              #将测试集结果写在excal表格中了。
with open('work/submit.csv', mode='w', newline='') as submit_file:csv_writer = csv.writer(submit_file)header = ['id', 'value']print(header)csv_writer.writerow(header)for i in range(240):row = ['id_' + str(i), ans_y[i][0]]csv_writer.writerow(row)print(row)

总结

额 ,看懂答案对我来说已经很吃力了,但这确实是一种好的学习方法。碰到一个不认识的函数或者语法就去查,可能比去看PYTHON教学视频来的还要快。
这篇作业应该是最简单的,但是还是花了很久时间才看懂,甚至回去又看了一遍前几集视频。只能说,路还很长,再接再厉!

李宏毅pm2.5作业【转载】相关推荐

  1. 【深度解析→博文总结】李宏毅机器学习2023作业02Classification(Framewise Phoneme Prediction)

    文章目录 [系列文章] [简要说明] [视频分享] [作业详情] [调参记录] [Simple Baseline:0.49798] [Medium Baseline:0.66440] [Stong B ...

  2. 李宏毅深度学习作业二

    任务说明 Binary classification is one of the most fundamental problem in machine learning. In this tutor ...

  3. 李宏毅机器学习课后作业(hw2)

    李宏毅机器学习课后作业(hw2) 直接上代码 import numpy as np np.random.seed(0) X_train_fpath = "C:\\Users\\13554\\ ...

  4. hw-2 李宏毅2022年作业2 phoneme识别 单strong-hmm详细解释。

    目录 系列文章 前言 : 项目: 一:  数据 : 二: 模型 三 : 训练和评估 四:main函数和训练过程 五 后处理 . 系列文章 2022李宏毅作业hw1-新冠阳性人员数量预测._亮子李的博客 ...

  5. 李宏毅2020机器学习作业3-CNN:食物图片分类

    更多作业,请查看 李宏毅2020机器学习资料汇总 文章目录 0 作业链接 1 作业说明 环境 任务说明 任务要求 数据说明 作业概述 2 原始代码 导入需要的库 读取图片 定义Dataset 定义模型 ...

  6. ⭐李宏毅机器学习2020作业汇总

    更新进度:■■■■■□□□□□□□□□□□□□□□|30% 李宏毅机器学习code 序号 主题 完成情况 作业一 Linear Regression ✅ 作业二 Classification ✅ 作业 ...

  7. 李宏毅2020机器学习作业2-Classification:年收入二分类

    更多作业,请查看 李宏毅2020机器学习资料汇总 文章目录 0 作业链接 1 作业说明 环境 任务说明 数据说明 作业概述 2 原始代码 2.0 数据准备 导入数据 标准化(Normalization ...

  8. 李宏毅 2020机器学习作业1 详细解析

    课程链接:http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML20.html 要做这个作业的话需要一定的高数.线代的基础,而且尽量要会使用python的nump ...

  9. 李宏毅机器学习课程作业-HW1

    整篇文章是笔者自我一点点学习和理解其所给指导代码的记录学习. 在读取文件的时候使用了pandas.read_csv()函数,其中enconding的参数时"big5",这是因为在这 ...

最新文章

  1. grep 命令使用笔记
  2. 外汇呼叫中心如何在严格监管中存续
  3. Java中print、printf、println的区别 详解
  4. Androi App缓存管理
  5. 想要阅读一些开源项目或框架的源代码,不知道从哪里入手?
  6. GHUnit for iOS测试指南
  7. LintCode,hihoCoder,LeetCode有什么区别?
  8. kettle系列-6.kettle实现多字段字典快速翻译
  9. Java基础学习总结(68)——有关Java线程方面的面试题
  10. MongoDB 查询文档
  11. 关于图神经网络的相关学习资源的分享——网站 博客(一)
  12. 【处理手记】VS2010SP1安装不上Visual Studio 2010 SP1 SDK的解决办法
  13. Word删除页眉横线的方法
  14. IDEA debug或启动报错:maven-resources-production:XXX:java.lang.NegativeArraySizeException
  15. 设置jupyter notebook默认浏览器
  16. Bomb Game(题目地址链接:https://acs.jxnu.edu.cn/problem/NOIOPJCH02011661)
  17. Linux下四款Web服务器压力测试工具…
  18. Whipple防护结构的建模与仿真技术
  19. 释放智能边缘广阔机遇,英特尔携手生态伙伴构建万物互联未来
  20. QTreeWidget使用整理

热门文章

  1. ionic XMLHttpRequest cannot load http://localhost:8080/...
  2. [示例] 迅雷看看播放完成后自动关机
  3. saltstack(4)动态pillar
  4. 毕业设计 大数据电商用户行为分析 -python 大数据
  5. lol服务器4月2日维修公告,lol维护公告最新
  6. python指针之结果猜谜,一个可爱的错误
  7. Python基础篇13:修改字符串
  8. Unity 游戏入门 四、 游戏地图的创建World Design – Tilemaps
  9. 李亚涛:python中文如何转换成拼音?
  10. 二造实务案例答题技巧和举例汇总,满满都是精髓