最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python純代碼通過神經網絡實現線性回歸的擬合方式

 更新時間:2023年05月31日 10:51:22   作者:Zhao-Jichao  
這篇文章主要介紹了Python純代碼通過神經網絡實現線性回歸的擬合方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

純代碼通過神經網絡實現線性回歸的擬合

參考鏈接中的文章,有錯誤,我給更正了。

并且原文中是需要數據集文件的,我直接給替換成了一個數組,采用直接賦值的方式。

# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
class SimpleDataReader(object):
    def __init__(self, data_file):
        self.train_file_name = data_file
        self.num_train = 0
        self.XTrain = None
        self.YTrain = None
    # read data from file
    def ReadData(self):
        # data = np.load(self.train_file_name)
        # self.XTrain = data["data"]
        # self.YTrain = data["label"]
        self.XTrain = np.array([0.95, 3, 4, 5.07, 6.03, 8.21, 8.85, 12.02, 15], dtype=float)
        self.YTrain = np.array([5.1, 8.7, 11.5, 13, 15.3, 18, 21, 26.87, 32.5], dtype=float)
        self.num_train = self.XTrain.shape[0]
        #end if
    # get batch training data
    def GetSingleTrainSample(self, iteration):
        x = self.XTrain[iteration]
        y = self.YTrain[iteration]
        return x, y
    def GetWholeTrainSamples(self):
        return self.XTrain, self.YTrain
class NeuralNet(object):
    def __init__(self, eta):
        self.eta = eta
        self.w = 0
        self.b = 0
    def __forward(self, x):
        z = x * self.w + self.b
        return z
    def __backward(self, x,y,z):
        dz = z - y                  # 原錯誤為:dz = x * (z - y)
        db = dz
        dw = dz
        return dw, db
    def __update(self, dw, db):
        self.w = self.w - self.eta * dw
        self.b = self.b - self.eta * db
    def train(self, dataReader):
        for i in range(dataReader.num_train):
            # get x and y value for one sample
            x,y = dataReader.GetSingleTrainSample(i)
            # get z from x,y
            z = self.__forward(x)
            # calculate gradient of w and b
            dw, db = self.__backward(x, y, z)
            # update w,b
            self.__update(dw, db)
            # end for
    def inference(self, x):
        return self.__forward(x)
if __name__ == '__main__':
    # read data
    sdr = SimpleDataReader('ch04.npz')
    sdr.ReadData()
    # create net
    eta = 0.1
    net = NeuralNet(eta)
    net.train(sdr)
    # result
    print("w=%f,b=%f" %(net.w, net.b))
    # 繪圖部分
    trainX,trainY = sdr.GetWholeTrainSamples()
    fig = plt.figure()
    ax = fig.add_subplot(111)
    # 繪制散點圖
    ax.scatter(trainX,trainY)
    # 繪制線性回歸
    x = np.arange(0, 15, 0.01)
    f = np.vectorize(net.inference, excluded=['x'])
    plt.plot(x,f(x),color='red')
    # 顯示圖表
    plt.show()

在這里插入圖片描述

Ref:

通過神經網絡實現線性回歸的擬合

Python使用線性回歸和神經網絡模型進行預測

公路運量主要包括公路客運量和公路貨運量兩個方面。

根據研究,某地區(qū)的公路運量主要與該地區(qū)的人數、機動車數量和公路面積有關,表5-11給出了某個地區(qū)20年的公路運量相關數據。

根據相關部門數據,該地區(qū)2010年和2011年的人數分別為73.39萬和75.55萬,機動車數量分別為3.9635萬輛和4.0975萬輛,公路面積分別為0.9880萬平方千米和1.0268萬平方千米。

請利用BP神經網絡預測該地區(qū)2010年和2011年的公路客運量和公路貨運量。

表5-11 運力數據表

年份 人數 機動車數量 公路面積 公里客運量 公里貨運量
1990 20.55 0.6 0.09 5126 1237
1991 22.44 0.75 0.11 6217 1379
1992 25.37 0.85 0.11 7730 1385
1993 27.13 0.9 0.14 9145 1399
1994 29.45 1.05 0.2 10460 1663
1995 30.1 1.35 0.23 11387 1714
1996 30.96 1.45 0.23 12353 1834
1997 34.06 1.6 0.32 15750 4322
1998 36.42 1.7 0.32 18304 8132
1999 38.09 1.85 0.34 19836 8936
2000 39.13 2.15 0.36 21024 11099
2001 39.99 2.2 0.36 19490 11203
2002 41.93 2.25 0.38 20433 10524
2003 44.59 2.35 0.49 22598 11115
2004 47.3 2.5 0.56 25107 13320
2005 52.89 2.6 0.59 33442 16762
2006 55.73 2.7 0.59 36836 18673
2007 56.76 2.85 0.67 40548 20724
2008 59.17 2.95 0.69 42927 20803
2009 60.63 3.1 0.79 43462 21804

注:數據取自《Matlab在數學建模中的應用(第2版)》,卓金武,第134頁。

在這里插入圖片描述

#1.數據獲取
import pandas as pd
data = pd.read_excel('運力數據表.xlsx')
x = data.iloc[:20,:4]
y = data.iloc[:20,4:]
#2.導入線性回歸模塊,簡稱為LR
from sklearn.linear_model import LinearRegression as LR
lr = LR()             #創(chuàng)建線性回歸模型類
lr.fit(x,y)         #擬合
slr=lr.score(x,y)   #判定系數 R^2
c_x=lr.coef_         #x對應的回歸系數
c_b=lr.intercept_   #回歸系數常數項
#3.預測
x1 = data.iloc[20:,:4]
r1=lr.predict(x1)    #采用自帶函數預測
#print('x回歸系數為:',c_x)
#print('回歸系數常數項為:',c_b)
#print('判定系數為:',slr)
#print('樣本預測值為:',r1)
n=list(data["公里客運量(萬人)"])
n.extend(r1[:,0])
num=pd.DataFrame(n).dropna()
g=list(data["公里貨運量(萬噸)"])
g.extend(r1[:,1])
gravity=pd.DataFrame(g).dropna()
import pandas as pd
import matplotlib.pyplot as plt  #導入繪圖庫中的pyplot模塊,并且簡稱為plt
#構造繪圖所需的橫軸數據列和縱軸數據列
#在figure界面上繪制線性圖
plt.rcParams['font.sans-serif'] = 'SimHei'     #設置字體為SimHei
plt.figure(1)
plt.plot(data["年份"],num,'r*--')  #紅色“*”號連續(xù)圖,
plt.xlabel('日期')
plt.ylabel('公里客運量(萬人')
plt.title('公里客運量(萬人)走勢圖')
plt.xticks(data["年份"],rotation = 45)
plt.savefig('myfigure1')
plt.figure(2)
plt.plot(data["年份"],gravity,'b*--')  #紅色“*”號連續(xù)圖,
plt.xlabel('日期')
plt.ylabel('公里貨運量(萬噸)')
plt.title('公里貨運量(萬噸)走勢圖')
plt.xticks(data["年份"],rotation = 45)
plt.savefig('myfigure2')
from sklearn.neural_network import MLPRegressor 
clf = MLPRegressor(solver='lbfgs', alpha=1e-5,hidden_layer_sizes=8, random_state=1) 
clf.fit(x, y);   
rv=clf.score(x,y)
r2=clf.predict(x1)   
print('樣本預測值為:',r2)
n2=list(data["公里客運量(萬人)"])
n2.extend(r2[:,0])
num2=pd.DataFrame(n2).dropna()
g2=list(data["公里貨運量(萬噸)"])
g2.extend(r2[:,1])
gravity2=pd.DataFrame(g2).dropna()

結果顯示:

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Python中Selenium模塊的使用詳解

    Python中Selenium模塊的使用詳解

    這篇文章主要介紹了Python中Selenium模塊的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • Python入門教程之運算符重載詳解

    Python入門教程之運算符重載詳解

    運算符重載意味著賦予超出其預定義的操作含義的擴展含義。例如運算符 + 用于添加兩個整數以及連接兩個字符串和合并兩個列表。本文將通過示例帶大家詳細了解Python的運算符重載,感興趣的可以了解一下
    2022-09-09
  • Python lxml模塊安裝教程

    Python lxml模塊安裝教程

    這篇文章主要介紹了Python lxml模塊安裝教程,本文分別講解了Windows系統和Linux系統下的安裝教程,需要的朋友可以參考下
    2015-06-06
  • Python的numpy選擇特定行列的方法

    Python的numpy選擇特定行列的方法

    這篇文章主要介紹了Python的numpy選擇特定行列的方法,有時需要抽取矩陣中特定行的特定列,比如,需要抽取矩陣x的0,1行的0,3列,結果為矩陣域,需要的朋友可以參考下
    2023-08-08
  • Python使用psutil獲取系統信息

    Python使用psutil獲取系統信息

    這篇文章介紹了Python使用psutil獲取系統信息的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • PyQt中實現自定義工具提示ToolTip的方法詳解

    PyQt中實現自定義工具提示ToolTip的方法詳解

    這篇文章主要為大家詳細介紹了PyQt中實現自定義工具提示ToolTip的方法詳解,文中的示例代碼講解詳細,對我們學習有一定幫助,需要的可以參考一下
    2022-05-05
  • Python身份運算符is與is?not區(qū)別用法基礎教程

    Python身份運算符is與is?not區(qū)別用法基礎教程

    這篇文章主要為大家介紹了Python身份運算符is與is?not區(qū)別用法基礎教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • 對Python中GIL(全局解釋器鎖)的一點理解淺析

    對Python中GIL(全局解釋器鎖)的一點理解淺析

    首先需要明確的一點是GIL并不是Python的特性,它是在實現Python解析器(CPython)時所引入的一個概念,下面這篇文章主要給大家介紹了關于對Python中GIL的一點理解,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • Python 中PyQt5 點擊主窗口彈出另一個窗口的實現方法

    Python 中PyQt5 點擊主窗口彈出另一個窗口的實現方法

    這篇文章主要介紹了Python 中PyQt5 點擊主窗口彈出另一個窗口的實現方法,本文代碼實例圖文相結合的形式給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • 基于Python實現復刻人生重開模擬器

    基于Python實現復刻人生重開模擬器

    人生重開模擬器是由VickScarlet上傳至GitHub的一款簡單的文字網頁游戲。本文將用Python復刻一下這個游戲,感興趣的小伙伴可以嘗試一下
    2022-10-10

最新評論

正安县| 常宁市| 寻乌县| 尼玛县| 黎川县| 韶山市| 米脂县| 桓仁| 竹山县| 潞城市| 东兴市| 溧阳市| 三门峡市| 邯郸县| 房山区| 方正县| 华容县| 邵阳县| 恩施市| 巴南区| 泸西县| 白玉县| 松滋市| 长丰县| 沁源县| 曲靖市| 乐安县| 库尔勒市| 江油市| 浦江县| 东乡族自治县| 广昌县| 马公市| 青岛市| 拉萨市| 镇江市| 刚察县| 舞钢市| 凌源市| 象州县| 泉州市|