李宏毅机器学习HW1 PM 2.5预测 by python

李宏毅机器学习HW1 PM 2.5预测 by python


数据连接
这是我的第一篇文章

以前常常划水查需要的资料,这次在李宏毅机器学习课程中想找到看看有没有合适的代码,但没有找到满意的,于是决定分享出我的代码希望一起交流一下。
上代码,再解释。

#!/usr/bin/python
# -*- coding:utf-8 -*-
import numpy as np

import pandas as pd


def Error(yArr, yHatArr):
    return np.sum(np.square(yArr - yHatArr))

def G(dataMatIn, classLabels):
    dataMatrix = np.mat(dataMatIn)
    labelMat = np.mat(classLabels).transpose()
    m, n = np.shape(dataMatrix)
    alpha = 0.0000001#目标移动的步长
    maxCycles = 100000#迭代次数
    weights = np.ones((n, 1))
    for k in range(maxCycles):
        h = (dataMatrix * weights)
        error = (labelMat - h)
        weights = weights + alpha * dataMatrix.transpose() * error
    return weights

def G2(dataMatIn, classLabels, ws):
    dataMatrix = np.mat(dataMatIn)
    labelMat = np.mat(classLabels).transpose()
    h = (dataMatrix*ws)
    error = Error(labelMat, h)
    return error


#处理数据#先把数据改成UTF-8的格式不然会发生中文乱码
TrainData = pd.read_csv(u'train.csv', encoding="UTF-8")
TrainData.insert(4, 'b', 1)#插入单位做常数项
pm = TrainData[TrainData['測項'] == 'PM2.5'].iloc[:-50,4:15]#选择+分割
pm1 = TrainData[TrainData['測項'] == 'PM2.5'].iloc[-50:,4:15]#选择+分割
xArr = pm.values[:, :-1]#字典类型转化为array
yArr = pm.values[:,-1]
xArr1 = pm1.values[:, :-1]#字典类型转化为array
yArr1 = pm1.values[:,-1]
xArr = xArr.astype(np.float)
yArr = yArr.astype(np.float)
xArr1 = xArr1.astype(np.float)
yArr1 = yArr1.astype(np.float)

ws = G(xArr, yArr)
print(ws)
error = G2(xArr1, yArr1, ws)
print(error/50)

其中需要注意的是需要先把数据转换成UTF-8不然中文字符看不见,由于主要是练习线性回归的使用,而且给的test.csv只有9个数据,也没时间点。
所以我只用了train.csv,把后面五十个作为test data,前面两百多个作为trainning data,嵌入一列常数1作为function的常数b,然后1-9时的pm 2.5值作为特征,预测10时的pm 2.5值,样本值较少,预设function为:y = b+w1x1+…+w9x9。

我用的迭代公式是:
在里插入图片描述
alpha设置为0.000001,迭代100000次,其中随着迭代次数的增加,错误率有所下降。
最后得到w = [[ 1.57834991] [ 0.0453516 ][-0.02405385][ 0.20269474][-0.38651145] [-0.02347248][ 0.73716365][-0.54358026] [-0.2195404 ] [ 1.22881283]]
error=28.332356499924522
后面有时间再进行其他参数的嵌入和function次数增加来减少error。

你可能感兴趣的:(算法方面)