美文网首页
2020-06-28 暑期学习日更计划(线性回归+概率论刷题))

2020-06-28 暑期学习日更计划(线性回归+概率论刷题))

作者: Reza_ | 来源:发表于2020-06-28 12:13 被阅读0次

Linear Regression

用的是李宏毅老师第一节课的课后作业讲义。纯用numpy搭建一个线性回归网络。
最简单的线性回归Y=WX

Load 'train.csv'

import pandas as pd
import numpy as np

data = pd.read_csv('./train.csv', encoding = 'big5')   #big5为繁体中文的编码

Preprocessing

数据预处理,把文档中有效的数据提取出来,再把数据中的无效值,全部替换成 0

data = data.iloc[:, 3:]   #选取测试集数据 第三列至最后一列,所有行
data[data == 'NR'] = 0  #数据清洗,把数据中值为 NR 的数据全部变成0
raw_data = data.to_numpy() #把pandas数据转换为Numpy格式

Extract Features (1)

提取数据特征

month_data = {}  #按照 月 切分数据
# np.set_printoptions(threshold=np.inf)
for month in range(12):
    sample = np.empty([18, 480]) #随机生成一个shape=(18,480)的矩阵,480=20*24
    for day in range(20): #一个月中有20天的数据,每天有24个小时的数据
        sample[:, day * 24 : (day + 1) * 24] = raw_data[18 * (20 * month + day) : 18 * (20 * month + day + 1), :]
        # 把raw_data中的数据按照(18,480)的格式,依次分配到sample中
    month_data[month] = sample
    #month_data中按 月 存储数据

Extract Features (2)

x = np.empty([12 * 471, 18 * 9], dtype = float) #随机生成一个shape=(5652,162)的数组,用于存放特征值
y = np.empty([12 * 471, 1], dtype = float) #随机生成一个shape=(5652,1)的数组,用于存放标签值
for month in range(12):
    for day in range(20):
        for hour in range(24):
            if day == 19 and hour > 14:
                continue
            x[month * 471 + day * 24 + hour, :] = month_data[month][:,day * 24 + hour : day * 24 + hour + 9].reshape(1, -1) 
            #拉平month_data,每次从month_data中获取9个特征,赋值到x中
            y[month * 471 + day * 24 + hour, 0] = month_data[month][9, day * 24 + hour + 9] 
            #y获取month_data的第九行,PM2.5的值作为标签值
print(x)
print(y)

Normalize (1)

把数据做标准归一化处理,防止一些较大的特征值对模型产生影响

mean_x = np.mean(x, axis = 0) #18 * 9 
std_x = np.std(x, axis = 0) #18 * 9 
#Z-Score标准化

for i in range(len(x)): #12 * 471
    for j in range(len(x[0])): #18 * 9 
        if std_x[j] != 0:
            x[i][j] = (x[i][j] - mean_x[j]) / std_x[j]
x

Traning Datesets

#训练集
dim = 18 * 9 + 1
w = np.zeros([dim, 1]) #权值w的初始值设为全0
x = np.concatenate((np.ones([12 * 471, 1]), x), axis = 1).astype(float)
learning_rate = 100 #学习率
iter_time = 1000 #迭代次数
adagrad = np.zeros([dim, 1]) #adagrad优化器
eps = 0.0000000001 #防止梯度消失
print(w.shape,x.shape)
for t in range(iter_time):
    loss = np.sqrt(np.sum(np.power(np.dot(x, w) - y, 2))/471/12)# 损失函数为 rmse
    if(t%100==0): 
        print(str(t) + ":" + str(loss)) #每迭代100轮输出一次损失值
    gradient = 2 * np.dot(x.transpose(), np.dot(x, w) - y) #dim*1
    adagrad += gradient ** 2
    w = w - learning_rate * gradient / np.sqrt(adagrad + eps) #自适应学习率
np.save('weight.npy', w) #保存权值
w

这里用了adagrad优化器,这个优化器的算法还没彻底理解,,,下次再补

Testing

#测试集训练
testdata = pd.read_csv('./test.csv', header = None, encoding = 'big5')
test_data = testdata.iloc[:, 2:]
test_data[test_data == '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)
#标准化
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)

test_x

Prediction

w = np.load('weight.npy') #读取权值
ans_y = np.dot(test_x, w) #点乘,输出值
ans_y

树莓派遇坑环节

  这回彻底被我玩坏了,每天都要重装一次系统,私以为这个32bit的Raspberry OS 已经不适合现在这个版本了,许多网上能用的软件到了这个OS上,总会有各种各种的错误。现在准备买个HDMI连接线,然后装个64bit 的Ubuntu Mate系统。
  之前那个改变分辨率崩溃的问题好像有些眉目了,可能是因为我没有用root用户去改。
  现在先把服务器的东西放一下,多去学一点机器学习的东西。

概率论部分

刷了一些基本的题目,感觉学得很蛇,还要继续学习。。。

相关文章

  • 《数据科学的数学必修课》第1讲 数学基础

    本书用七章分别讲解了数学基础、概率论、描述性统计、线性代数、线性回归、逻辑回归、神经网络。 目录第1讲 数学基础[...

  • 线性回归模型

    参考:1.使用Python进行线性回归2.python机器学习:多元线性回归3.线性回归概念 线性回归模型是线性模...

  • 多项线性回归

    之前学习了单一线性回归和多元线性回归,这次来学习下多项线性回归,那什么事多项线性回归呢?先看下图Polynomia...

  • 《机器学习》线性模型公式推导与算法实现

    线性回归 参考西瓜书《机器学习》线性回归 给定训练集,其中,.线性回归(linear regression)试图学...

  • 机器学习

    监督学习: 分类与回归 线性回归: 线性模型:最小二乘法,岭回归,lasso回归 解决线性问题...

  • 线性回归--原理

    线性回归--原理 线性回归--python实现(不使用框架) 线性回归--sklearn框架实现 通常我们学习机器...

  • 2019-10-29

    Day2 简单线性回归模型 机器学习入门--简单线性回归机器学习算法之线性回归算法 导入库matplotlib 绘...

  • 【机器学习快速入门教程4】线性回归

    章节4:线性回归 本章节,我们将介绍线性回归问题,机器学习中最基础的问题。 线性回归 线性回归是指在一组数据中拟合...

  • Python编写线性回归算法

    Python编写线性回归算法 前言 线性回归(Linear Regression)是机器学习的基础,作为机器学习算...

  • Python 机器学习算法一之线性回归的推导及实战

    线性回归是机器学习中最基本的算法了,一般要学习机器学习都要从线性回归开始讲起,本节就对线性回归做一个详细的解释。 ...

网友评论

      本文标题:2020-06-28 暑期学习日更计划(线性回归+概率论刷题))

      本文链接:https://www.haomeiwen.com/subject/ocdofktx.html