大模型0基礎開發入門與實踐:第3章 機器的“統計學”:機器學習基礎概念掃盲

第3章 機器的“統計學”:機器學習基礎概念掃盲

1. 引言

想象一下,你是一位古代的農夫,畢生的經驗告訴你:烏云密布、燕子低飛,那么不久便會下雨。你并沒有學習過氣象學,也不懂大氣壓和水汽凝結的原理。你的“預測能力”,完全源自于對“烏云、燕子”這些**特征(Features)與“下雨”這個結果(Label)**之間關系的長期觀察和歸納。這,就是一種最樸素的“學習”。

在上一章,我們已經掌握了處理數據的“工具”——Python、NumPy和Pandas。現在,我們要讓機器也來扮演這位“老農”,去從數據中自動學習規律,并用學到的規律來預測未來。這便是機器學習(Machine Learning)的魅力所在。它不是讓機器進行死板的邏輯演繹,而是賦予機器一種類似人類的、基于經驗歸納的“直覺”。

本章學習目標:

  • 理解機器學習的核心思想:明白“模型”是什么,以及機器是如何通過“訓練”來學習的。
  • 掌握機器學習的三大范式:清晰地區分監督學習、無監督學習和強化學習,了解它們各自適用的場景。
  • 熟悉一個完整的機器學習流程:從數據準備到模型訓練,再到評估和預測,了解一個機器學習項目通用的“七步走”流程。
  • 完成第一個預測模型:使用最經典的機器學習庫Scikit-learn,親手構建、訓練并評估一個簡單的分類模型。

本章核心問題:

  • 我們常說的“模型訓練”,訓練的到底是什么?“學習”這個過程在數學上是如何體現的?
  • “有老師教”和“自學成才”在機器學習里分別對應什么?它們有什么根本區別?
  • 拿到一份雜亂無章的數據,我們應該遵循怎樣的步驟,才能把它變成一個能做預測的AI模型?

在本章,我們將正式從“數據處理員”晉升為“算法訓練師”。我們將揭開機器學習的神秘面紗,你會發現,那些看似高深莫測的預測算法,其核心思想往往樸素而又深刻。準備好,讓我們開始教機器“學”會思考的第一課。


2. 正文

2.1 學習的本質:從數據到模型的映射

在第一章我們曾打過一個比方:教機器人區分蘋果和橙子。我們給它看成百上千張圖片,并告訴它“這是蘋果”、“那是橙子”。這個過程,在機器學習的語境下,有一個更專業的術語,叫做訓練(Training)

背景與動機
傳統編程的思路是規則+數據=答案。例如,我們寫一個判斷閏年的程序,規則是“能被4整除但不能被100整除,或能被400整除”。我們輸入一個年份(數據),程序根據規則輸出“是”或“否”(答案)。但對于很多復雜問題,如人臉識別、垃圾郵件過濾,我們根本無法寫出明確的規則。機器學習則顛覆了這個模式,它的思路是數據+答案=規則。我們給機器大量的“人臉圖片”(數據)和對應的“姓名”(答案),讓機器自己去“悟”出那個我們無法寫出的“識別規則”。

直觀比喻:什么是模型?

這個被機器自己“悟”出來的“規則”,就是模型(Model)

你可以把模型想象成一個極其復雜的、帶有無數旋鈕的“函數發生器”。

  • 輸入(Input):一張水果的圖片(可以看作一堆像素數據)。
  • 輸出(Output):一個預測結果(比如“蘋果”或“橙子”)。
  • 旋鈕(Parameters):模型內部有成千上萬個可以調節的參數,就像調音臺上的推子。這些參數的組合,決定了輸入和輸出之間的映射關系

訓練的過程,就好比一個調音師在調試這個函數發生器。

  1. 初始狀態:所有旋鈕都處于一個隨機的位置。此時,你給它一張蘋果的圖片,它可能會胡亂輸出“橙子”。
  2. 反饋與調整:你告訴它:“錯了!正確答案是‘蘋果’。” 調音師(優化算法)聽到這個反饋后,會微調一下那些導致錯誤輸出的旋鈕。比如,把某個與“紅色”特征相關的旋鈕向上推一點。
  3. 重復迭代:你不斷地把成千上萬張帶有正確答案的圖片(訓練數據)喂給它。每一次,調音師都會根據預測結果和真實答案之間的差距(誤差/損失 Loss),來精細地調整成千上萬個旋鈕。
  4. 訓練完成:經過海量數據的“洗禮”,這臺機器的無數個旋鈕,最終被調整到了一個絕佳的組合狀態。此時,模型就“學會”了。你再給它一張它從未見過的新圖片,它也能大概率地輸出正確的預測。

原理解析:學習的數學本質
在數學上,模型可以被看作一個函數 ( f(x; \theta) )。

  • ( x ): 代表輸入數據(比如一張圖片的像素矩陣)。
  • ( \theta ): 代表模型內部所有可調節的參數(我們比喻中的“旋鈕”),這是一個巨大的參數集合。
  • ( f ): 代表模型的結構和計算方式(比如是線性回歸模型,還是決策樹模型)。
  • ( y’ = f(x; \theta) ): 代表模型根據輸入 ( x ) 和當前參數 ( \theta ) 做出的預測輸出。

我們還有一個真實標簽 ( y )。損失函數(Loss Function) ( L(y’, y) ) 用來衡量預測值 ( y’ ) 和真實值 ( y ) 之間的差距。例如,最簡單的均方誤差損失:( L = (y’ - y)^2 )。

機器學習的訓練目標,就是找到一組最優的參數 ( \theta^* ),使得在所有訓練數據上的總損失(Total Loss)最小。這個尋找最優參數的過程,通常使用一種叫做**梯度下降(Gradient Descent)**的優化算法來完成,我們將在后續章節深入探討。

2.2 三大學習范式:老師、自學與實戰

根據“學習”方式的不同,機器學習主要分為三大流派:監督學習、無監督學習和強化學習。

2.2.1 監督學習 (Supervised Learning):跟著老師學

這是目前應用最廣、最成功的學習范式。它的核心特點是,我們提供給機器的訓練數據都帶有明確的“答案”,也就是標簽(Label)

  • 直觀比喻:就像學生在課堂上學習。我們給他一本帶答案的練習冊(帶標簽的數據),里面有題目(輸入特征),也有標準答案(輸出標簽)。學生通過做題、對答案、訂正錯誤(模型訓練),逐漸掌握解題規律。
  • 典型任務
    • 分類 (Classification):預測一個離散的類別標簽。
      • 例子:判斷一封郵件是否是“垃圾郵件”;識別一張圖片中的動物是“貓”還是“狗”;判斷一個客戶是否會“流失”。輸出是有限的、明確的類別。
    • 回歸 (Regression):預測一個連續的數值。
      • 例子:預測明天的“氣溫”;預測一套房子的“價格”;預測一支股票的“股價”。輸出是一個具體的、連續變化的數字。
  • 我們本章的實戰案例,就屬于監督學習中的分類任務。
2.2.2 無監督學習 (Unsupervised Learning):自己找規律

與監督學習相反,無監督學習的訓練數據沒有任何標簽。機器需要自己去探索數據內部隱藏的結構和模式。

  • 直觀比喻:就像一位生物學家來到一個全新的星球,面對成千上萬種前所未見的生物(無標簽數據)。他沒有任何參考書,只能通過觀察這些生物的外形、習性、大小等特征,將它們自發地分成不同的“物種”(聚類)。
  • 典型任務
    • 聚類 (Clustering):將相似的數據點分到同一個“簇”中。
      • 例子:根據用戶的購買歷史,將用戶分成不同的群體(如“高價值用戶”、“價格敏感用戶”),以便進行精準營銷。
    • 降維 (Dimensionality Reduction):在保留主要信息的前提下,減少數據的特征數量。
      • 例子:將一個包含500個指標的復雜用戶畫像,壓縮成幾個核心維度(如“購買力”、“活躍度”),便于分析和可視化。
2.2.3 強化學習 (Reinforcement Learning):在試錯中成長

強化學習是一種獨特的范式,它不直接使用“數據”,而是讓一個**智能體(Agent)在一個環境(Environment)**中行動,通過與環境的互動來學習。

  • 直觀比喻:就像訓練一只寵物。你希望它學會“坐下”這個動作。
    • 智能體:你的寵物狗。
    • 環境:你的客廳。
    • 行動 (Action):它可能選擇搖尾巴、跳躍或者真的坐下了。
    • 獎勵 (Reward):如果它碰巧做出了“坐下”的動作,你就立刻給它一塊零食(正獎勵)。如果它做了其他動作,你就不給獎勵(或輕微的懲罰)。
    • 通過不斷的“嘗試-反饋”,寵物狗會逐漸明白,“坐下”這個動作能夠帶來最大的“獎勵”,于是它就學會了。AlphaGo下圍棋,就是強化學習最著名的應用。
  • 典型任務
    • 游戲AI(如圍棋、星際爭霸)、機器人控制、自動駕駛決策等。

下圖總結了這三種學習范式的核心區別:

graph TDsubgraph Supervised [監督學習]direction LRA[帶標簽的數據<br/>(X, Y)] --> B[學習從X到Y的映射<br/>f(X) ≈ Y]endsubgraph Unsupervised [無監督學習]direction LRC[無標簽的數據<br/>(X)] --> D[發現數據X中的結構<br/>例如:聚類, 降維]endsubgraph Reinforcement [強化學習]direction LRE[智能體 (Agent)] -- 行動 (Action) --> F[環境 (Environment)]F -- 狀態 (State), 獎勵 (Reward) --> Eend

2.3 按圖索驥:一個完整的機器學習項目流程

無論任務多復雜,一個標準的機器學習項目通常都遵循一個固定的流程。這就像是我們的“攻略地圖”,指導我們一步步從原始數據走向最終的模型。

graph TDA[1. 問題定義<br/>(明確業務目標)] --> B[2. 數據收集<br/>(獲取原始數據)];B --> C[3. 數據預處理與探索<br/>(清洗, 轉換, 可視化)];C --> D[4. 特征工程<br/>(選擇/創造好的特征)];D --> E[5. 模型選擇與訓練<br/>(切分數據集, 訓練模型)];E --> F[6. 模型評估<br/>(在測試集上評估性能)];F -- 性能不佳 --> E;F -- 性能達標 --> G[7. 模型部署與監控<br/>(上線應用, 持續觀察)];
  1. 問題定義:我們要解決什么問題?是分類還是回歸?我們的成功標準是什么?
  2. 數據收集:從數據庫、文件、API等來源獲取數據。
  3. 數據預處理:這是最耗時但至關重要的一步。包括處理缺失值、轉換數據類型、處理異常值等。
  4. 特征工程:選擇對模型預測最有幫助的特征,或者從現有特征中創造出新的、更有用的特征。
  5. 模型選擇與訓練:根據問題類型選擇合適的模型(如決策樹、邏輯回歸等)。關鍵一步是將數據分成訓練集(Training Set)和測試集(Test Set)。我們用訓練集來“教”模型,用測試集來模擬“期末考試”,檢驗模型的泛化能力。
  6. 模型評估:使用精確率、召回率、準確率等指標來客觀地評價模型在測試集上的表現。如果表現不佳,我們需要回到第4或第5步,調整特征或更換模型。
  7. 模型部署:當模型性能達標后,將其集成到實際的應用中去,并持續監控其表現。

2.4 實戰:用Scikit-learn構建你的第一個分類器

理論講了這么多,是時候動手了!我們將使用Python中最著名的通用機器學習庫Scikit-learn,來解決一個經典的分類問題:鳶尾花(Iris)分類

場景
鳶尾花有三個不同的亞種(Setosa, Versicolour, Virginica),它們的花萼(sepal)和花瓣(petal)的長寬有較為明顯的區別。我們的任務是,構建一個模型,僅根據一朵鳶尾花的花萼和花瓣的測量數據,就能自動判斷出它屬于哪個亞種。

代碼實戰

# --- 1. 導入必要的庫 ---
# 從sklearn.datasets中導入load_iris函數,用于加載鳶尾花數據集
from sklearn.datasets import load_iris
# 從sklearn.model_selection中導入train_test_split,用于切分數據集
from sklearn.model_selection import train_test_split
# 從sklearn.tree中導入DecisionTreeClassifier,即決策樹分類器
from sklearn.tree import DecisionTreeClassifier
# 從sklearn.metrics中導入accuracy_score,用于計算分類準確率
from sklearn.metrics import accuracy_score
import pandas as pd # 導入pandas用于數據展示# --- 2. 加載并探索數據 ---
# 加載數據集
iris = load_iris()
X = iris.data # X是特征數據,一個[150x4]的numpy數組,150個樣本,4個特征
y = iris.target # y是標簽數據,一個長度為150的numpy數組,代表每個樣本的類別# 為了方便觀察,我們把數據轉換成Pandas DataFrame
df = pd.DataFrame(data=X, columns=iris.feature_names)
df['species'] = y # 添加物種標簽列
df['species'] = df['species'].map({0: 'setosa', 1: 'versicolor', 2: 'virginica'}) # 將數字標簽映射為物種名print("數據集前5行:")
print(df.head())
print("\n數據集基本信息:")
df.info()# --- 3. 劃分訓練集和測試集 ---
# 這是機器學習中至關重要的一步!
# train_test_split會將X和y按照一定比例(我們這里是80%訓練,20%測試)隨機打亂并切分
# random_state=42 是為了保證每次切分的結果都一樣,便于復現實驗
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)print(f"\n訓練集大小: {X_train.shape[0]} 個樣本")
print(f"測試集大小: {X_test.shape[0]} 個樣本")# --- 4. 選擇模型并進行訓練 ---
# 我們選擇一個簡單而直觀的模型:決策樹
# 創建一個決策樹分類器實例(對象)
model = DecisionTreeClassifier(random_state=42)# 使用.fit()方法,在訓練數據上“訓練”模型
# 這個過程就是我們在2.1節中比喻的“調音師調整旋鈕”的過程
model.fit(X_train, y_train)print("\n模型訓練完成!")# --- 5. 在測試集上進行預測 ---
# 模型訓練好后,我們用它來對“從未見過”的測試集X_test進行預測
y_pred = model.predict(X_test)print("\n模型在測試集上的預測結果:", y_pred)
print("測試集的真實標簽:", y_test)# --- 6. 評估模型性能 ---
# 使用accuracy_score來比較預測結果和真實標簽,計算準確率
accuracy = accuracy_score(y_test, y_pred)
print(f"\n模型在測試集上的準確率是: {accuracy:.2f}") # .2f表示保留兩位小數# --- 7. 使用模型進行全新預測 ---
# 假設我們在野外采到一朵新的鳶尾花,測量了它的數據
# 花萼長5.0cm, 寬3.5cm; 花瓣長1.5cm, 寬0.3cm
new_flower_data = [[5.0, 3.5, 1.5, 0.3]]# 使用訓練好的模型進行預測
prediction = model.predict(new_flower_data)
predicted_species_index = prediction[0]
predicted_species_name = iris.target_names[predicted_species_index]print(f"\n對全新數據的預測結果: 類別索引 {predicted_species_index}, 物種名 '{predicted_species_name}'")

預期輸出:

數據集前5行:sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm) species
0                5.1               3.5                1.4               0.2  setosa
1                4.9               3.0                1.4               0.2  setosa
2                4.7               3.2                1.3               0.2  setosa
3                4.6               3.1                1.5               0.2  setosa
4                5.0               3.6                1.4               0.2  setosa數據集基本信息:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 150 entries, 0 to 149
Data columns (total 5 columns):#   Column             Non-Null Count  Dtype  
---  ------             --------------  -----  0   sepal length (cm)  150 non-null    float641   sepal width (cm)   150 non-null    float642   petal length (cm)  150 non-null    float643   petal width (cm)   150 non-null    float644   species            150 non-null    object 
dtypes: float64(4), object(1)
memory usage: 6.0+ KB訓練集大小: 120 個樣本
測試集大小: 30 個樣本模型訓練完成!模型在測試集上的預測結果: [1 0 2 1 1 0 1 2 1 1 2 0 0 0 0 1 2 1 1 2 0 2 0 2 2 2 2 2 0 0]
測試集的真實標簽: [1 0 2 1 1 0 1 2 1 1 2 0 0 0 0 1 2 1 1 2 0 2 0 2 2 2 2 2 0 0]模型在測試集上的準確率是: 1.00對全新數據的預測結果: 類別索引 0, 物種名 'setosa'

Q&A: 你可能會問……

  • Q: 為什么測試集準確率能達到1.00(100%)?是不是太理想了?
  • A: 問得好!是的,這確實非常理想。主要原因是鳶尾花數據集是一個非常“干凈”和簡單的“教學”數據集,不同類別之間的界限很分明。在真實的、復雜的業務場景中,模型準確率幾乎不可能達到100%,通常能達到80%-95%就已經非常優秀了。
  • Q: random_state=42是什么意思?42有什么特殊含義嗎?
  • A: random_state是一個用于固定隨機數生成器種子的參數。在機器學習中,很多操作(如切分數據、初始化模型參數)都帶有隨機性。設置一個固定的random_state(比如42)可以保證我們每次運行代碼時,這些隨機操作的結果都是完全一樣的,這對于調試和復現實驗結果至關重要。數字42本身沒有任何特殊含義,它只是一個社區中常用的約定,源于科幻小說《銀河系漫游指南》。你可以換成任何其他整數。

3. 總結與預告

在本章中,我們正式推開了機器學習的大門。我們不再僅僅是數據的“搬運工”,而是成為了能夠賦予機器“學習”能力的“訓練師”。

本章核心要點

  • 機器學習的核心:不是編寫規則,而是讓模型通過訓練,從數據中自動學習將輸入映射到輸出的規律(參數)。
  • 三大范式
    • 監督學習:用帶標簽的數據進行訓練,解決分類回歸問題。(有老師教)
    • 無監督學習:用無標簽的數據進行訓練,解決聚類降維問題。(靠自學)
    • 強化學習:通過與環境的互動獎勵來學習最佳策略。(在試錯中成長)
  • 標準流程:一個成功的機器學習項目需要經歷問題定義、數據處理、模型訓練、評估和部署等一系列規范化步驟。
  • Scikit-learn初體驗:我們利用這個強大的庫,完整地走完了一個分類任務的流程,成功訓練了一個能識別鳶尾花種類的決策樹模型。

我們今天學習的決策樹,是一種經典的機器學習模型。但是,它的能力是有限的。當面對像圖像、聲音、文本這樣極其復雜的數據時,單個決策樹就顯得力不從心了。我們需要一種更強大、更靈活、更能捕捉數據深層復雜模式的模型結構。

這,正是下一章**《“腦細胞”的模擬:神經網絡與深度學習入門》將要為我們揭示的。我們將深入探索模仿人類大腦神經元連接方式而構建的人工神經網絡**,理解它是如何工作的,并親手用代碼搭建我們的第一個“迷你大腦”。這將是我們通往理解大語言模型的關鍵一步。


4. 課后練習

  1. 概念辨析:請用你自己的話,分別解釋“分類”和“回歸”的根本區別,并各舉一個你在生活中遇到的例子(不能是本章已有的例子)。
  2. 代碼修改:請修改本章的Scikit-learn實戰代碼。將模型從DecisionTreeClassifier更換為另一種經典的分類模型KNeighborsClassifier(K-近鄰分類器)。你需要:
    • sklearn.neighbors中導入KNeighborsClassifier
    • 創建它的實例 model = KNeighborsClassifier(n_neighbors=3)
    • 重新訓練并評估模型,看看準確率有什么變化。
  3. 思考題:在劃分訓練集和測試集時,我們遵循了“用訓練集訓練,用測試集評估”的原則。為什么我們不能用測試集的數據來訓練模型?如果這么做了,會對模型評估結果產生什么影響?(這個概念非常重要,被稱為“數據泄露”)

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

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

相關文章

Java調用Ollama(curl方式)

1. 安裝Ollama Search 2. 調用 相關依賴 <dependencies><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.14</version></dependency><dependency>&…

nodejs koa框架使用

1: KOA 是express 打造的下一代web 開發框架提供更小更強的的核心功能&#xff0c;通過Promise 、async/await 進行異步編程&#xff0c;koa 可以不使用回調&#xff0c;解決了回調地獄的問題 blueBird 是nodejs 最出名的Primise 實現&#xff0c;除了實現標準的promise 之外&a…

2025年圖像處理與光學國際會議(ICIPO 2025)

2025年圖像處理與光學國際會議&#xff08;ICIPO 2025&#xff09; 2025 International Conference on Image Processing and Optics一、大會信息會議簡稱&#xff1a;ICIPO 2025 大會地點&#xff1a;中國北京 審稿通知&#xff1a;投稿后2-3日內通知 投稿郵箱&#xff1a;iac…

Kubernetes 構建高可用、高性能 Redis 集群

k8s下搭建Redis高可用1. 部署redis服務創建ConfigMap創建 Redis創建 k8s 集群外部2. 創建 Redis 集群自動創建 redis 集群手動創建 redis 集群驗證集群狀態3. 集群功能測試壓力測試故障切換測試4. 安裝管理客戶端編輯資源清單部署 RedisInsight控制臺初始化控制臺概覽實戰環境使…

文件IO的基礎操作

Java針對文件進行的操作:文件系統操作,File類(file類指定的路徑,可以是一個不存在的文件)文件內容操作 : 流對象分為兩類(1)字節流 以字節為基本的讀寫單位的 二進制文件 InputStream OutputStream(2)字符流 以字符為基本的讀寫單位的 …

【模版匹配】基于深度學習

基于深度學習的模版匹配 概述 本報告整理了2024-2025年最新的、可直接使用的模板匹配相關論文、方法和開源代碼實現。所有方法都提供了完整的代碼實現和預訓練模型&#xff0c;可以直接應用到實際項目中。 一、輕量級現代模板匹配框架 1.1 UMatcher - 4M參數的緊湊型模板匹…

CMake進階:Ninja環境搭建與加速項目構建

目錄 1.引入Ninja的原因 2.Ninja 環境搭建&#xff08;跨平臺&#xff09; 2.1.Linux系統安裝 2.2.macOS 系統 2.3.Windows 系統 2.4.源碼編譯安裝&#xff08;通用方案&#xff09; 3.Ninja 與構建系統配合&#xff1a;以 CMake 為例 4.加速構建的關鍵技巧 5.Ninja 與…

開發避坑指南(35):mybaits if標簽test條件判斷等號=解析異常解決方案

異常信息 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: The expression orderInfo.idList evaluated to a null value.報錯語句 <if test"orderInfo.queryFlag ! null and orderInfo.queryFlag sett…

GitCode 疑難問題診療:全面指南與解決方案

引言 在軟件開發的動態領域中&#xff0c;GitCode 作為一款強大的分布式版本控制系統&#xff0c;已然成為團隊協作與項目管理的基石。它賦予開發者高效管理代碼版本、輕松實現并行開發以及順暢協同合作的能力。然而&#xff0c;如同任何復雜的技術工具&#xff0c;在 GitCode…

使用 JS 渲染頁面并導出為PDF 常見問題與修復

本文直擊兩個最常見的導出痛點&#xff0c;并給出可直接落地的診斷 修復方案&#xff08;適用于 html2canvas jsPDF ECharts/自繪 canvas 場景&#xff09;。 問題清單 問題 A&#xff1a;導出后圖表模糊&#xff0c;線條與文字不清晰&#xff08;低分辨率&#xff09;。問題…

【Java后端】【可直接落地的 Redis 分布式鎖實現】

可直接落地的 Redis 分布式鎖實現&#xff1a;包含最小可用版、生產可用版&#xff08;帶 Lua 原子解鎖、續期“看門狗”、自旋等待、可重入&#xff09;、以及基于注解AOP 的無侵入用法&#xff0c;最后還給出 Redisson 方案對比與踩坑清單。一、設計目標與約束 獲取鎖&#x…

數據結構 -- 鏈表--雙向鏈表的特點、操作函數

雙向鏈表的操作函數DouLink.c#include "DouLink.h" #include <stdio.h> #include <stdlib.h> #include <string.h>/*** brief 創建一個空的雙向鏈表* * 動態分配雙向鏈表管理結構的內存&#xff0c;并初始化頭指針和節點計數* * return 成功返回指…

Wireshark獲取數據傳輸的碼元速率

一、Wireshark的物理層參數 Wireshark主界面可以看到數據發送時刻和長度&#xff1a; 這個時刻是Wireshark完整獲取數據包的時刻&#xff0c;實際上就是結束時刻。 需要知道的是&#xff1a; Wireshark工作在數據鏈路層及以上&#xff0c;它能解碼 以太網幀 / IP 包 / TCP…

11.1.3 完善注冊登錄,實現文件上傳和展示

1、完善注冊/登錄 1. 涉及的數據庫表單&#xff1a;user_info 2. 引用MySQL線程池&#xff0c;Redis線程池 3. 完善注冊功能 4. 完善登錄功能 2.1 涉及的數據庫表單&#xff1a;user_info 重新創建數據庫 #創建數據庫 DROP DATABASE IF EXISTS 0voice_tuchuang;CREATE D…

【Linux文件系統】目錄結構

有沒有剛進入Linux世界時&#xff0c;對著黑乎乎的終端&#xff0c;輸入一個 ls / 后&#xff0c;看著蹦出來的一堆名字 like bin, etc, usr&#xff0c;感覺一頭霧水&#xff0c;像是在看天書&#xff1f; 別擔心&#xff0c;你不是一個人。Linux的文件系統就像一個超級有條理…

螺旋槽曲面方程的數學建模與偏導數求解

螺旋槽曲面的數學描述 在鉆頭設計和機械加工領域,螺旋槽的幾何建模至關重要。螺旋槽通常由徑向截形繞軸做螺旋運動形成,其數學模型可通過參數方程和隱函數方程兩種方式描述。 設螺旋槽的徑向截形方程為: y=f(z)y = f(z)y=f(z) x=xcx = x_cx=xc? 其中 xcx_cxc? 為常數,…

線性回歸:機器學習中的基石

在機器學習的眾多算法中&#xff0c;線性回歸無疑是最基礎也是最常被提及的一種。它不僅在統計學中占有重要地位&#xff0c;而且在預測分析和數據建模中也發揮著關鍵作用。本文將深入探討線性回歸的基本概念、評估指標以及在實際問題中的應用&#xff0c;并通過一個模擬的氣象…

編程刷題-資料分發1 圖論/DFS

P2097 資料分發 1 題目描述 有一些電腦&#xff0c;一部分電腦有雙向數據線連接。 如果一個電腦得到數據&#xff0c;它可以傳送到的電腦都可以得到數據。 現在&#xff0c;你有這個數據&#xff0c;問你至少將其輸入幾臺電腦&#xff0c;才能使所有電腦得到數據。 輸入格式 第…

RabbitMQ:延時消息(死信交換機、延遲消息插件)

目錄一、死信交換機【不推薦】二、延遲消息插件【推薦】2.1 安裝插件【Linux】2.2 安裝插件【Windows】2.3 如何使用延時消息&#xff1a;生產者發送消息時指定一個時間&#xff0c;消費者不會立刻收到消息&#xff0c;而是在指定時間之后才收到消息。 延時任務&#xff1a;設置…

動學學深度學習05-深度學習計算

動學學深度學習pytorch 參考地址&#xff1a;https://zh.d2l.ai/ 文章目錄動學學深度學習pytorch1-第05章-深度學習計算1. 層&#xff08;Layer&#xff09;與塊&#xff08;Block&#xff09;1.1 什么是深度學習中的“層”&#xff1f;1.2 什么是“塊”&#xff08;Block&…