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 年成渝城市群各城市燈光指...