2023年12月24日學習總結

今日to do list:

  • 做kaggle上面的流量預測項目??
  • 學習時不刷手機🤡
    okkkkkkkkkkkkkk
    開始👍🍎
    在這里插入圖片描述

0、我在干什么?

我在預測一個名字叫做elborn基站的下行鏈路流量,用過去29天的數據預測未來10天的數據

1、import libararies

一般必須都要導入的庫有

  • import pandas as pd : data processing, like pd.read.csv…
  • import numpy as np :線性代數
  • import matplotlib.pyplot as plt :畫圖
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import numpy as np  # linear algebra
import warnings
warnings.filterwarnings('ignore') # 忽略警告信息
import matplotlib.pyplot as plt

2、加載數據load data

對csv數據使用pandas.read_csv函數讀取
一些參數:

  • filepath_or_buffer: 文件路徑或緩沖區。可以是本地文件路徑,也可以是文件對象、URL等
  • header: 列名索引。指定數據文件中列名的索引。默認為None,表示沒有列名。取值可以是整數,表示第幾行為列名;也可以是None,表示自動檢測列名;還可以是列表,表示指定列名的位置。
  • na_values: 缺失值。指定用于替換缺失值的字符或列表。默認為[‘NA’, ‘null’, ‘NaN’]。
  • index_col: 索引列。指定數據文件中用于索引的列。默認為None,表示沒有索引列。取值可以是整數,表示第幾列用于索引;也可以是列名,表示指定列用于索引。
  • sep: 分隔符。用于分隔數據行的字段。默認為逗號,。
  • delimiter: 分隔符。與sep類似,但它是更通用的參數,可以用于其他類型的分隔符,如制表符\t等。
elborn_df = pd.read_csv('dataset/ElBorn.csv')
elborn_test_df = pd.read_csv('dataset/ElBorn_test.csv')

3、獨家觀察數據函數 💓

💥basic_eda💥

  • 前五行
  • 顯示DataFrame的詳細信息,包括列名、數據類型、缺失值
  • 顯示DataFrame的統計摘要信息,包括每列的平均值、標準差、最小值、最大值等
  • 顯示列名
  • 各列的數據類型
  • 是否有缺失值
  • 是否有NULL值
  • 數據的形狀
def basic_eda(df):print("-------------------------------TOP 5 RECORDS-----------------------------")print(df.head(5))print("-------------------------------INFO--------------------------------------")print(df.info())print("-------------------------------Describe----------------------------------")print(df.describe())print("-------------------------------Columns-----------------------------------")print(df.columns)print("-------------------------------Data Types--------------------------------")print(df.dtypes)print("----------------------------Missing Values-------------------------------")print(df.isnull().sum())print("----------------------------NULL values----------------------------------")print(df.isna().sum())print("--------------------------Shape Of Data---------------------------------")print(df.shape)print("============================================================================ \n")
basic_eda(elborn_df)
basic_eda(elborn_test_df)

然后畫圖看一下💥

# 我現在想把elborn_df畫出來,橫坐標是時間,縱坐標是down,并且橫坐標的標簽要旋轉45度書寫
plt.plot(elborn_df.index, elborn_df.down)
plt.xlabel('Time')
plt.ylabel('Down')
plt.title('Down')
# 我想把橫坐標的日期標簽旋轉45
plt.xticks(rotation=45)

在這里插入圖片描述
在這里面的Python小知識總結(純小白哈🌸)

  • DataFrame.index:將得到DataFrame的索引(日期),作為Series對象
    • 如果DataFrame的index是整數,則返回一個從0開始的整數序列
    • 0 0
      1 1
      2 2
      3 3
      4 4
      5 5
      6 6
      7 7
      8 8
      9 9
      Name: index, dtype: int64
  • plt.plot():繪制折線的基本函數
    以下是一些參數
    • x: x軸數據,可以是列表、元組、NumPy數組等。
    • y: y軸數據,可以是列表、元組、NumPy數組等。
    • fmt: 折線圖的樣式和顏色。
      • 例如,'ro-'表示紅色圓圈加短橫線,
      • 'b–'表示藍色虛線。
    • label:為折線圖添加一個標簽,可以在plt.legend()函數中使用該標簽(用于顯示圖例)。
    • linewidth: 折線圖的寬度。
    • color: 折線圖的顏色。
    • marker: 折線圖的標記形狀,例如圓圈、叉號等。
    • markeredgecolor: 標記的邊緣顏色。
    • markerfacecolor: 標記的填充顏色。
    • markevery: 標記的間隔,例如每隔10個數據點標記一次。
  • plt.xticks(rotation=45):設置x軸刻度標簽的位置和顯示方式

4、數據預處理pre-processing

(1)將時間戳轉換為一個日期時間索引

elborn_df.set_index(pd.DatetimeIndex(elborn_df["time"]), inplace=True)
elborn_df.drop(["time"], axis=1, inplace=True)

(2)填充所有缺失的值

不填充的話后續fit模型的時候會出現loss全部為NAN的情況

elborn_df.down.fillna(elborn_df.down.mean(), inplace=True)
print(elborn_df.isna().sum())

(3)將時間序列數據轉換成監督學習數據

在訓練監督學習(深度學習)模型前,要把time series數據轉化成samples的形式
那什么是sample?有一個輸入組件 X X X和一個輸出組件 y y y
深度學習模型就是一個映射函數: y = f ( X ) y=f(X) y=f(X)
對于一個單變量的one-step預測:輸入組件就是前一個時間步的滯后數據,輸出組件就是當前時間步的數據,如下:
X, y
[1, 2, 3], [4]
[2, 3, 4], [5]
[3, 4, 5], [6]

這里就是手動轉換啦,之前寫過使用TimeseriesGenerator自動轉換的方法,看看對比

手動轉換
def series_to_supervised(data, window=3, lag=1, dropnan=True):cols, names = list(), list()# Input sequence (t-n, ... t-1)for i in range(window, 0, -1):cols.append(data.shift(i))names += [('%s(t-%d)' % (col, i)) for col in data.columns]# Current timestep (t=0)cols.append(data)names += [('%s(t)' % (col)) for col in data.columns]# Target timestep (t=lag)cols.append(data.shift(-lag))names += [('%s(t+%d)' % (col, lag)) for col in data.columns]# Put it all togetheragg = pd.concat(cols, axis=1)agg.columns = namesreturn agg
window =29
lag = 10
elborn_df_supervised = series_to_supervised(elborn_df, window, lag)

(4)數據集劃分(split)為訓練集和驗證集

  • 訓練集和測試集的區別

    • 使用驗證集是為了快速調參,也就是用驗證集選擇超參數(網絡層數,網絡節點數,迭代次數,學習率這些)。另外用驗證集還可以監控模型是否異常(過擬合啦什么的),然后決定是不是要提前停止訓練。
    • 驗證集的關鍵在于選擇超參數,我們手動調參是為了讓模型在驗證集上的表現越來越好,如果把測試集作為驗證集,調參去擬合測試集,就有點像作弊了。
    • 測試集不參與參數的學習過程,也不參與參數的選擇過程,僅僅用于模型評價
  • 訓練集在建模過程中會被大量經常使用,驗證集用于對模型少量偶爾的調整,而測試集只作為最終模型的評價出現,因此訓練集,驗證集和測試集所需的數據量也是不一致的,在數據量不是特別大的情況下一般遵循6:2:2的劃分比例

  • 為了使模型“訓練”效果能合理泛化至“測試”效果,從而推廣應用至現實世界中,因此一般要求訓練集,驗證集和測試集數據分布近似。但需要注意,三個數據集所用數據是不同的。

from sklearn.model_selection import train_test_split
label_name = 'down(t+%d)' % (lag)
label = elborn_df_supervised[label_name]
elborn_df_supervised = elborn_df_supervised.drop(label_name, axis=1)
X_train, X_valid, Y_train, Y_valid = train_test_split(elborn_df_supervised, label, test_size=0.4, random_state=0)
print('Train set shape', X_train.shape)
print('Validation set shape', X_valid.shape)

4、創建MLP模型

(1)設置超參數

epochs = 40
batch = 256
lr = 0.0003
adam = optimizers.Adam(lr)

(2)創建模型(keras)

model_mlp = Sequential()
model_mlp.add(Dense(100, activation='relu', input_dim=X_train.shape[1]))
model_mlp.add(Dense(1))
model_mlp.compile(loss='mse', optimizer=adam)
model_mlp.summary()

在這里插入圖片描述

(3)訓練模型

mlp_hitstory = model_mlp.fit(X_train.values, Y_train, epochs=epochs, batch_size=batch, validation_data=(X_valid.values, Y_valid), verbose=2)

(4)畫隨epoch變化的loss圖

# 畫圖,橫坐標是epochs,縱坐標是loss,分別畫出train loss和validation loss
import matplotlib.pyplot as pltplt.plot(mlp_hitstory.history['loss'])
plt.plot(mlp_hitstory.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'validation'], loc='upper left')
plt.show()

在這里插入圖片描述

(5)計算預測值和實際值之間的均方誤差

from sklearn.metrics import mean_squared_error
mlp_train_pred = model_mlp.predict(X_train.values)
mlp_valid_pred = model_mlp.predict(X_valid.values)
print('Train rmse:', np.sqrt(mean_squared_error(Y_train, mlp_train_pred)))
print('Validation rmse:', np.sqrt(mean_squared_error(Y_valid, mlp_valid_pred)))

接寫到這里吧,今天效率太低了,明天繼續
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447224.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447224.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447224.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Mac/Linux系統連接遠端服務器以及相同IP地址的服務器賬號密碼重置,ssh失敗問題

連接遠端服務器 ssh 賬號IP地址 輸入完成之后會提示輸入密碼,密碼輸入正確后,就可以連接成功了 重置ssh密鑰 如果連接的服務器除了IP地址沒有改變,其余的賬號、密碼、系統等都變了的話,因為曾經連接過的歷史數據會保存到本地&a…

內存泄漏快速定位方法

主要方法&#xff1a;利用系統帶的函數&#xff1a;EnableMemLeakCheck() 和函數重載&#xff0c;能快速準備的定位到內存泄漏的地方&#xff0c;方法簡單且實用&#xff0c;值得借用。 #include <crtdbg.h> #ifdef_DEBUG //重載一下new函數&#xff0c;這樣能得到使…

Linux操作系統監視NVIDIA的GPU使用情況

對于GPU相關參數介紹 使用命令周期性查看GPU運行情況最常用的參數是 -n&#xff0c; 后面指定是每多少秒來執行一次命令。監視顯存&#xff1a;設置為每 1s 顯示一次顯存的情況&#xff1a;使用命令ctrlz退出 watch -n 1 nvidia-smi 參數介紹 Fan&#xff1a;顯示風扇轉速&am…

一個軟件工程師的職業規劃

[1]好好規劃自己的路&#xff0c;不要跟著感覺走&#xff01;根據個人的理想決策安排&#xff0c;絕大部分人并不指望成為什么院士或教授&#xff0c;而是希望活得滋潤一些&#xff0c;爽一些。那么&#xff0c;就需要慎重安排自己的軌跡。從哪個行業入手&#xff0c;逐漸對該行…

算法入門篇四 桶排序

桶排序 計數排序&#xff08;基于統計&#xff09; 要求數據是有限的&#xff0c;和數據狀況有關&#xff0c;比如對于200個人統計他們的年齡分布&#xff0c;這個時候需要申請200個桶&#xff0c;因此對于輸入數據的規模有限制&#xff0c;如果輸入規模是不定的&#xff0c;…

RTP概述

1.1. RTP是什么 RTP全名是Real-time Transport Protocol&#xff08;實時傳輸協議&#xff09;。它是IETF提出的一個標準&#xff0c;對應的RFC文檔為RFC3550&#xff08;RFC1889為其過期版本&#xff09;。RFC3550不僅定義了RTP&#xff0c;而且定義了配套的相關協議RTCP&…

Java需要注意的一些小細節

更加精確的鎖定時間 判定納秒維度的時間 //使用System.nanoTime(); //例子 long start System.nanoTime(); long end System.nanoTime(); System.out.println(start); System.out.println(end);

live555的安裝 RTSP點播消息流程實例(客戶端:VLC, RTSP服務器:LIVE555 Media Server)

live555是一個開源的軟件&#xff0c;主要用來生成rtsp,rtp和sip服務器和客戶端的軟件。前幾天需要看一下vlc中的rtsp的功能&#xff0c;在vlc中rtp和rtsp的功能都是使用live555中的函數來生成的。該開源軟件的編譯&#xff0c;可以使用vc,mingw和cygwin等軟件。我安裝的時候使…

算法入門篇五 鏈表

牛客網 算法入門篇 判斷一個鏈表是否為回文結構 給定一個單鏈表的頭節點head&#xff0c;請判斷這個鏈表是否為回文結構1->2->1&#xff0c;返回為True;1->2->3為False 思路&#xff1a; 1&#xff0c;遍歷鏈表&#xff0c;將所有元素壓入棧中&#xff0c;然后再…

實時流媒體編程基于Linux環境開發

一、流媒體簡介 隨著Internet的日益普及&#xff0c;在網絡上傳輸的數據已經不再局限于文字和圖形&#xff0c;而是逐漸向聲音和視頻等多媒體格式過渡。目前在網絡上傳輸音頻/視頻&#xff08;Audio/Video&#xff0c;簡稱A/V&#xff09;等多媒體文件時&#xff0c;基本上只有…

算法入門篇六 二叉樹

牛客網 算法入門篇 左程云老師 個人復習&#xff0c;如果侵全&#xff0c;設為私密 二叉樹遍歷&#xff08;遞歸&#xff09; 先序遍歷&#xff08;中&#xff0c;左&#xff0c;右&#xff09; 中序遍歷&#xff08;左&#xff0c;中&#xff0c;右&#xff09; 后序遍歷&a…

VLC詳細的使用說明以及配置說明綜合示范實例精通VLC開發

vlc的全名是Video LanClient&#xff0c;是一個開源的、跨平臺的視頻播放器。VLC支持大量的音視頻傳輸、封裝和編碼格式&#xff0c;完整的功能特性列表可以在這里獲得http://www.videolan.org/vlc/features.html&#xff0c;下面給出一個簡要的不完整的列表&#xff1a;操作系…

算法入門篇七 前綴樹

牛客網 左程云老師的算法入門課 找二叉樹的節點的后繼節點 原則 如果節點有右子樹&#xff0c;那么后繼節點就是右子樹的最左邊的第一個節點如果節點沒有右子樹&#xff0c;如果節點是父節點的右孩子&#xff0c;就繼續往上找&#xff0c;直到找到一個父節點是沿途節點的父節…

VLC視頻播放器原理詳細分析含TS流格式分析

vlc是一個功能強大的玩意&#xff0c;能做很多有意思的事情。最簡單的&#xff0c;從界面打開一個文件播放&#xff0c;也可以在命令行下使用&#xff0c;如C:\Program Files\VideoLAN\VLC>vlc.exe test.ts獲取內置的幫助&#xff0c;會寫到vlc-help.txtC:\Program Files\Vi…

算法入門篇八 貪心算法

牛客網 左程云老師的算法入門課 貪心算法 貪心算法的解題步驟 例子 題目要求 解題策略 按照結束時間早的會議先安排&#xff0c;比如先安排【2&#xff0c;4】&#xff0c;當4結束了&#xff0c;所有開始時間小于4的全部淘汰&#xff0c;【1&#xff0c;7】、【3&#xff…

算法入門篇九 暴力遞歸

牛客網 左程云老師的算法入門課 暴力遞歸 原則 漢諾塔問題 問題 打印n層漢諾塔從左邊移動到最右邊的過程 思想 一共六個過程&#xff0c;左到右、左到中&#xff0c;中到左&#xff0c;中到右&#xff0c;右到左&#xff0c;右到中&#xff0c;互相嵌套使用 左到右 將1…

rtsp和sdp

RTSP 是由Realnetwork 和Netscape共同提出的如何有效地在IP網絡上傳輸流媒體數據的應用層協議 。 實時流協議&#xff08;RTSP&#xff09;建立并控制一個或幾個時間同步的連續流媒體&#xff0c;如音頻和視頻。盡管連續媒體流與控制流交叉是可能的&#xff0c;RTSP本身并不發…

使用javascript實現對于chineseocr的API調用

ChineseOCR在線API 網頁地址 界面 提供多種接口調用方式&#xff0c;比如在線調用、Javascript api調用、curl api調用和python api調用四種方式&#xff0c;本次使用javascript api調用的方式進行OCR識別在線Javascript工具 在線工具網頁鏈接在線Base64 轉化工具 在線工具…

移動流媒體業務的技術與標準

1 引言   流媒體業務是從Internet上發展起來的一種多媒體應用&#xff0c;指使用流&#xff08;Streaming&#xff09;方式在網絡上傳輸的多媒體文件&#xff0c;包括音頻、視頻和動畫等。   流媒體傳輸技術的主要特點是以流&#xff08;streaming&#xff09;的形式進行多…

使用python實現對于chineseocr的API調用

ChineseOCR在線API 網頁鏈接 界面 提供多種接口調用方式&#xff0c;比如在線調用、Javascript api調用、curl api調用和python api調用四種方式&#xff0c;本次使用javascript api調用的方式進行OCR識別在線Base64 轉化工具 Base64在線小工具代碼修改 新增一個變量fill_w…