李巨集毅PM2 5

2021-09-23 10:37:35 字數 3555 閱讀 3525

import numpy as np

import pandas as pd

dir_path = r"g:\python3code\deeplearn\機器學習\回歸\week1"

train = pd.read_csv(dir_path + r'\train.csv',engine='python', encoding='utf-8')

test = pd.read_csv(dir_path + r'\test.csv', engine='python', encoding='utf-8')

train = train[train['observation'] == 'pm2.5']

test = test[test['amb_temp'] == 'pm2.5']

train = train.drop(['date', 'stations', 'observation'], axis=1)

x_test = test.iloc[:, 2:]

train_x =

train_y =

for i in range(15):

x = train.iloc[:, i:i + 9]

x.columns = np.array(range(9))

y = train.iloc[:, i + 9]

y.columns = np.array(range(1))

# 對矩陣進行拼接,預設是行,即垂直拼接

x_train= pd.concat(train_x)

y_train = np.array(pd.concat(train_y),dtype=np.float)

print(x_train.shape,y_train.shape)

class linearregression(object):

def __init__(self,epochs=200,lr=0.01,b=0,w=0):

""":param epochs: 迭代次數

:param lr: 學習率

:param b: 初始偏置

:param w: 初始權重

"""self.epochs = epochs

self.lr = lr

self.b = b

self.w =w

def sst(self,y_data):

"""總平方和 真實 - 平均"""

sum = np.array(y_data)- np.mean(y_data)

return np.sum(sum)

def mse(self,y_data,y_predict):

mse = np.sum((y_data - y_predict) ** 2) / len(y_data)

return mse

def sse(self,y_data,y_predict):

"""殘差平方和"""

sse= np.sum((y_data-y_predict)**2)

return sse

def r(self,y_data,y_predict):

sse = self.sse(y_data=y_data,y_predict=y_predict)

sst = self.sst(y_data=y_data)

print(sse/sst)

return 1-sse/sst

def normalized(self,x_data,x_test):

"""歸一化,x-min/(max-min)

"""max = np.array(np.max(x_data,axis=0))

min = np.array(np.min(x_data,axis=0))

x_data= np.array(x_data,dtype=np.float32) - min / (max - min)

x_test = np.array(x_test,np.float) - min / (max - min)

return x_data,x_test

# 用矩陣去算 標準方程法

def standard_equation(self,x_data,y_data):

"""標準方程法,不使用梯度下降,直接求解權重

但需要計算 x_data.t*x_data是否可逆,可逆才能使用

"""# 對輸入新增偏置 3600*9變成 3600*10 偏置為1新增到前面

x_data = np.hstack((np.ones((len(x_data),1)),x_data))

x_tx = x_data.t.dot(x_data)

# 判斷是否有逆矩陣

if np.linalg.det(x_tx) ==0:

print('矩陣不可逆,不能使用標準方程法')

return

# 計算權重 w = (x.t*x)**-1 x.t y

weight = np.linalg.inv(x_tx).dot(x_data.t).dot(y_data)

return weight

def predict(self,x_data,weight):

x_data = np.hstack((np.ones((len(x_data),1)),x_data))

y_predict = x_data.dot(weight)

return y_predict

def gradient_descent(self,x_data,y_data):

"""使用矩陣的方式

:return:

"""# 加上偏置

x_data = np.hstack((np.ones((len(x_data),1)),x_data))

shape = x_data.shape

# 權重初始化

w = (np.random.random([shape[1],1]) - 0.5) * 2

y_data = y_data.reshape((shape[0],1))

for i in range(20):

res = np.dot(x_data,w)

w_c = self.lr * (x_data.t.dot(y_data - res)) / int(

x_data.shape[0])

w = w - w_c

return w

line =linearregression()

x_data,x_test = line.normalized(x_data=x_train,x_test=x_test)

weight =line.standard_equation(x_data=x_data,y_data=y_train)

predict =line.predict(x_data=x_data,weight=weight)

r =line.r(y_data=y_train,y_predict=predict)

print(r)

weight = line.gradient_descent(x_data=x_data,y_data=y_train)

print(weight)

李巨集毅機器學習 Introduction

人工智慧是我們想要達到的目標,即讓機器和人一樣智慧型。而機器學習是方法,讓機器從資料中學習,從而得到智慧型的方法。智慧型是什麼呢?對於人類智慧型而言,根據霍華德 加德納的多元智慧型理論,人類的智慧型分為以下七種智慧型 這不僅涵蓋了現在人工智慧的研究領域,計算機視覺 語音識別 自然語言處理等。而且也指...

51微控制器 PM2 5檢測

include include define uint unsigned int define uchar unsigned char 微控制器型號stc12c5a60s2 感測器gp2y1014au uchar set st uchar tab 5 uint dust set 150 固體顆粒的閾...

PM2 5與城市化的關係

研究資料 1998 2013年夜間燈光 nasa pm2.5柵格資料集 統計年鑑 研究方法 gwr 地理探測器 研究區 成渝城市群 研究內容 基於gwr模型,了pm2.5濃度與夜間燈光 一定程度上表示城市化水平 的關係 基於地理探測器,了2006 年 2010 年 2013 年成渝城市群各城市燈光指...