七天學完十大機器學習經典算法-06.支持向量機(SVM):分類邊界的藝術——深入淺出指南

?

接上一篇《七天學完十大機器學習經典算法-05.從投票到分類:K近鄰(KNN)算法完全指南》

想象你要在操場上為兩個班級劃活動區域,如何畫出一條最公平的分界線?這條線不僅要分開兩班學生,還要讓兩個班都離分界線盡可能遠——這就是支持向量機的核心思想。

一、SVM是什么?為什么它是"藝術"?

支持向量機(Support Vector Machine, SVM)?是機器學習中最強大且最受歡迎的監督學習算法之一,主要用于分類任務,也可用于回歸(稱為SVR)。它被譽為"分類邊界的藝術",源于其獨特的目標:尋找最優分類超平面,最大化類別間的邊界(Margin)

SVM的核心哲學
  1. 追求最大間隔:不同于其他算法只關注分類正確,SVM致力于找到一條"最寬的道路"來分隔類別,提升模型的泛化能力(處理新數據的能力)。

  2. 關注關鍵樣本:SVM的決策邊界僅由少數關鍵樣本點決定,這些點被稱為支持向量——它們像柱子一樣"支撐"起分類的邊界道路。

  3. 應對復雜邊界:通過核技巧(Kernel Trick),SVM能在高維空間中輕松找到線性分界面,解決原始低維空間中的非線性問題。

(圖1:SVM的核心目標是找到間隔最大的超平面,支持向量是位于間隔邊界上的樣本點)

二、從線性可分到線性不可分:SVM的演進之路

場景1:完美線性可分(硬間隔SVM)

問題:假設我們有一組學生數據,特征只有兩個:平均每天學習時間(小時)每周出勤率(%)。目標是根據這些預測該學生是否可能通過考試(是/否)。數據點在二維平面上線性可分

目標:找到一條直線(在更高維是超平面w·x + b = 0,完美分開兩類,并使得間隔(Margin)?最大化。

  • 決策函數f(x) = sign(w·x + b)

    • 若?w·x + b >= 1,預測為類別+1(通過)

    • 若?w·x + b <= -1,預測為類別-1(未通過)

  • 間隔:兩條虛線?w·x + b = 1?和?w·x + b = -1?之間的距離。數學計算得出:間隔 = 2 / ||w||

  • 優化目標:最大化間隔等價于最小化?||w||2 / 2(為了后續優化方便)。

約束條件:所有訓練樣本必須分類正確且位于間隔邊界之外(或之上)。

  • 對于類別+1的樣本:w·x_i + b >= 1

  • 對于類別-1的樣本:w·x_i + b <= -1

  • 合并為:y_i(w·x_i + b) >= 1(其中?y_i?是樣本的類別標簽,取值為+1或-1)

支持向量:是那些滿足?y_i(w·x_i + b) = 1?的樣本點。它們直接決定了決策邊界的位置和方向。即使刪除其他所有樣本,只保留支持向量,SVM得到的決策邊界也不會改變。

# 線性可分SVM示例 (Python偽代碼)
from sklearn.svm import SVC# 假設X_train是特征[[學習時間, 出勤率], ...], y_train是標簽[1, -1, ...]
model = SVC(kernel='linear', C=1000)  # C設置很大,近似"硬間隔"
model.fit(X_train, y_train)# 獲取支持向量
support_vectors = model.support_vectors_
print("支持向量坐標:", support_vectors)# 獲取決策邊界參數 w 和 b
w = model.coef_[0]
b = model.intercept_[0]
print(f"決策邊界方程: {w[0]:.2f}*學習時間 + {w[1]:.2f}*出勤率 + {b:.2f} = 0")
場景2:近似線性可分(軟間隔SVM)

現實挑戰:真實數據往往存在噪聲或些許重疊,嚴格線性可分(硬間隔)會導致模型過擬合、非常敏感,甚至無解。

解決方案軟間隔(Soft Margin)SVM。允許一些樣本點違反?y_i(w·x_i + b) >= 1?的約束,即允許它們進入間隔內部甚至被錯誤分類,但要受到懲罰。

  • 引入松弛變量(Slack Variables)ξ_i >= 0

    • ξ_i = 0:樣本點滿足硬間隔約束。

    • 0 < ξ_i < 1:樣本點位于間隔內部,但分類正確。

    • ξ_i >= 1:樣本點被錯誤分類。

  • 修改約束條件y_i(w·x_i + b) >= 1 - ξ_i

  • 修改優化目標:在最小化?||w||2 / 2(最大化間隔)的同時,也要最小化所有松弛變量的總和(懲罰分類錯誤),即:最小化: ||w||2 / 2 + C * Σξ_i

    • C:懲罰參數(關鍵超參數!)

      • C?很大(如1000):對分類錯誤的懲罰很重。模型傾向于更小的訓練錯誤(間隔可能變窄),可能過擬合。

      • C?很小(如0.1):對分類錯誤的懲罰很輕。模型允許更多訓練錯誤(間隔可能變寬),提高泛化能力,可能欠擬合。

支持向量:在軟間隔SVM中,支持向量包括:

  1. 位于間隔邊界上的樣本點(y_i(w·x_i + b) = 1)。

  2. 位于間隔內部的樣本點(0 < y_i(w·x_i + b) < 1)。

  3. 被錯誤分類的樣本點(y_i(w·x_i + b) < 0)。

# 軟間隔SVM示例 - 調整C值
model_low_C = SVC(kernel='linear', C=0.1)  # 容忍更多錯誤,寬間隔
model_high_C = SVC(kernel='linear', C=10) # 容忍更少錯誤,窄間隔model_low_C.fit(X_train, y_train)
model_high_C.fit(X_train, y_train)# 可視化兩種C值下的決策邊界和間隔 (通常需要matplotlib)
# ... 代碼會顯示C越大邊界越曲折,C越小邊界越平滑 ...
場景3:完全線性不可分(核技巧與非線性SVM)

問題:如果我們的學生數據分布如下圖所示,無法用一條直線分開"通過"和"未通過"的學生呢?

SVM的魔法:核技巧(Kernel Trick)

  1. 核心思想:將原始低維空間中的非線性可分數據,通過一個非線性映射函數Φ,轉換到一個高維(甚至無限維)的特征空間中。在這個高維空間中,數據變得線性可分(或近似線性可分)!

  2. 關鍵優勢(核技巧的精髓):SVM的優化目標和決策函數都只依賴于樣本點之間的內積(Dot Product)?<x_i, x_j>。我們不需要顯式計算高維空間中的復雜映射Φ(x),也不需要知道Φ(x)的具體形式。我們只需要定義一個核函數(Kernel Function)?K(x_i, x_j),它等于高維空間中的內積<Φ(x_i), Φ(x_j)>

    • 優化目標變為:最大化 Σα_i - 1/2 ΣΣα_i α_j y_i y_j K(x_i, x_j)

    • 決策函數變為:f(x) = sign( Σα_i y_i K(x_i, x) + b )

  3. 常用核函數

    • 線性核(Linear Kernel)K(x_i, x_j) = x_i·x_j。就是原始空間的內積,用于線性情況。

    • 多項式核(Polynomial Kernel)K(x_i, x_j) = (γ * x_i·x_j + r)^dd控制多項式階數,γ, r是參數。能學習d階多項式決策邊界。

    • 徑向基函數核(RBF Kernel / 高斯核)K(x_i, x_j) = exp(-γ * ||x_i - x_j||2)最常用!?γgamma)控制高斯函數的寬度,決定單個樣本的影響范圍。γ大,影響范圍小,決策邊界曲折(可能過擬合);γ小,影響范圍大,決策邊界平滑(可能欠擬合)。

    • Sigmoid核K(x_i, x_j) = tanh(γ * x_i·x_j + r)。效果類似神經網絡。

它避免了直接進行高維計算的巨大開銷,僅通過在原空間計算核函數K就等效實現了高維空間中的線性分類。這是SVM處理非線性問題的關鍵。

# 非線性SVM示例 (使用RBF核)
from sklearn.datasets import make_circles
import matplotlib.pyplot as plt# 創建環形可分數據 (二維線性不可分)
X, y = make_circles(n_samples=100, noise=0.1, factor=0.5, random_state=42)# 使用線性SVM (注定失敗)
linear_svm = SVC(kernel='linear').fit(X, y)
# 使用RBF核SVM
rbf_svm = SVC(kernel='rbf', gamma=1, C=1).fit(X, y)# 可視化結果
def plot_decision_boundary(model, X, y, title):# ... 創建網格點 ...# ... 預測網格點類別 ...plt.contourf(xx, yy, Z, alpha=0.3)  # 繪制決策區域plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired)  # 繪制樣本點plt.scatter(model.support_vectors_[:, 0], model.support_vectors_[:, 1],s=100, facecolors='none', edgecolors='k')  # 標出支持向量plt.title(title)plt.show()plot_decision_boundary(linear_svm, X, y, "Linear Kernel (Fails)")
plot_decision_boundary(rbf_svm, X, y, "RBF Kernel (Succeeds)")

三、SVM實戰:手把手解決真實問題

案例1:鳶尾花分類(經典數據集再戰)

目標:根據花萼和花瓣的長度、寬度(4個特征),區分山鳶尾、變色鳶尾、維吉尼亞鳶尾(3類)。SVM天然處理二分類,但可通過"一對一"或"一對多"策略處理多類。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, classification_report
from sklearn.preprocessing import StandardScaler  # 重要!# 1. 加載數據
iris = load_iris()
X = iris.data
y = iris.target# 2. 特征標準化 (SVM對特征尺度敏感!)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 3. 劃分訓練集/測試集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=42)# 4. 創建SVM模型 (使用RBF核,并調整關鍵參數)
svm_model = SVC(kernel='rbf', C=1.0, gamma='scale')  # 'scale'是gamma的默認值,1/(n_features * X.var())
# 也可以嘗試 GridSearchCV 尋找最優C和gamma# 5. 訓練模型
svm_model.fit(X_train, y_train)# 6. 預測測試集
y_pred = svm_model.predict(X_test)# 7. 評估模型
accuracy = accuracy_score(y_test, y_pred)
print(f"測試集準確率: {accuracy:.4f}")
print("\n分類報告:\n", classification_report(y_test, y_pred))# 8. 查看支持向量 (每個類都可能有多支持向量)
print("支持向量數量:", len(svm_model.support_vectors_))

關鍵點

  1. 特征標準化必不可少:SVM基于距離(核函數常基于距離如RBF),不同特征量綱差異會極大影響結果。StandardScaler使每個特征均值為0,標準差為1。

  2. 參數調優Cgamma(對于RBF核)是核心超參數。通常使用網格搜索(GridSearchCV)或隨機搜索(RandomizedSearchCV)尋找最優組合。

案例2:手寫數字識別(MNIST數據集簡化版)

目標:識別0-9的手寫數字圖片(28x28像素=784維特征)。

from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, confusion_matrix
import matplotlib.pyplot as plt# 1. 加載簡化版MNIST (8x8像素)
digits = load_digits()
X = digits.data
y = digits.target# 2. 劃分訓練集/測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 3. SVM參數網格搜索 (小范圍示例,實際需要更廣范圍/交叉驗證)
param_grid = {'C': [0.1, 1, 10], 'gamma': [0.001, 0.01, 0.1], 'kernel': ['rbf']}
grid_search = GridSearchCV(SVC(), param_grid, cv=3, n_jobs=-1, verbose=2)
grid_search.fit(X_train, y_train)# 4. 最優模型
best_svm = grid_search.best_estimator_
print("最優參數:", grid_search.best_params_)# 5. 預測測試集
y_pred = best_svm.predict(X_test)# 6. 評估
accuracy = accuracy_score(y_test, y_pred)
print(f"測試集準確率: {accuracy:.4f}")
print("\n混淆矩陣:\n", confusion_matrix(y_test, y_pred))# 7. 可視化一些預測結果和支持向量 (支持向量在高維空間,難以直接可視化784維)
plt.figure(figsize=(10, 8))
for i in range(10):plt.subplot(2, 5, i + 1)plt.imshow(X_test[i].reshape(8, 8), cmap='gray')plt.title(f"Pred: {y_pred[i]}, True: {y_test[i]}")plt.axis('off')
plt.tight_layout()
plt.show()

注意

  • 實際MNIST(28x28)維度更高,計算量更大。SVM在中小型數據集上表現優異,但對于超大規模數據集(如ImageNet),訓練會非常慢,此時深度學習的CNN更高效。

  • 特征標準化(如MinMaxScaler縮放到[0, 1])在這里也很有幫助,因為像素值范圍是[0, 16]。

  • 支持向量在高維空間(這里是64維),難以像二維案例那樣直觀展示。

四、SVM的優缺點:看清手中的利劍

優點
  1. 強大的分類性能:尤其在中小型數據集、特征維度不太高的情況下,常常能取得非常高的準確率。

  2. 理論完備性:基于堅實的統計學習理論(VC維、結構風險最小化),泛化誤差有界。

  3. 高維數據處理有效:即使特征數量遠大于樣本數量(如文本分類),核技巧也能有效工作。

  4. 內存效率高:決策函數僅依賴于支持向量。預測新樣本時,只需計算它與支持向量的核函數值。

  5. 靈活性:通過選擇不同的核函數(kernel),可以構造各種復雜的非線性決策邊界,適應不同問題。C參數提供對錯誤分類和模型復雜度的控制。

  6. 對特征相關性不敏感:不像線性回歸等對特征多重共線性敏感。

缺點
  1. 訓練時間復雜度高:標準的SVM訓練算法復雜度通常在?O(n2)?到?O(n3)?之間(n是樣本數)。對于大型數據集(>10萬樣本)訓練非常慢

  2. 參數選擇(C, gamma)敏感:參數選擇對模型性能影響巨大,需要仔細調優(如網格搜索)。結果解釋性不如決策樹或線性模型直觀。

  3. 難以直接輸出概率估計:雖然可以通過Platt縮放等方法得到概率估計(SVC(probability=True)),但其可靠性通常不如邏輯回歸。

  4. 對缺失數據和噪聲敏感:訓練前需要仔細處理缺失值和異常值。

  5. 核函數選擇依賴經驗:選擇最合適的核函數及其參數需要領域知識和實驗。

  6. 二分類原生設計:處理多類分類需要額外策略(OvO, OvR),增加計算開銷。

五、SVM最佳實踐指南

  1. 數據預處理是王道

    • 標準化/歸一化StandardScalerMinMaxScaler是SVM前必須的步驟。

    • 處理缺失值:刪除或填充缺失值。

    • 處理異常值:SVM(尤其是大C值)對異常值敏感。

  2. 從簡單模型開始:先嘗試線性核(kernel='linear'。如果效果不佳,再考慮非線性核(如RBF)。線性SVM通常更快、更容易解釋。

  3. 核心超參數調優

    • C?(懲罰參數):嘗試對數間隔值(如0.001, 0.01, 0.1, 1, 10, 100)。使用交叉驗證評估。

    • gamma?(RBF核參數):嘗試對數間隔值(如0.001, 0.01, 0.1, 1, 10, 100)。gamma='scale'(默認)或gamma='auto'是好的起點。gamma?和?C?需要聯合調優!?務必使用GridSearchCVRandomizedSearchCV

  4. 核函數選擇策略

    • 特征多/樣本大/疑似線性:先用線性核

    • 樣本數中等/特征間關系復雜:首選RBF核(高斯核),靈活強大。

    • 特征有明確階數關系:可試多項式核(需調degree)。

  5. 利用高效算法

    • 對于大型線性SVM,考慮使用LinearSVC(基于liblinear庫),它通常比SVC(kernel='linear')(基于libsvm)更快,尤其支持penalty='l1'(稀疏解)或penalty='l2'

    • 對于大型非線性SVM,可考慮近似算法或采樣技術,但深度網絡可能是更好的選擇。

  6. 理解支持向量:查看支持向量的數量和分布,有助于理解模型的復雜度和決策依據。

  7. 多類分類策略SVC默認采用"一對一"(OvO)。對于特別多的類別,"一對多"(OvR)可能更快,但SVC通常自動處理得很好。

六、SVM在現實世界中的閃光點

  1. 文本分類與情感分析:SVM(特別是線性核)是文本分類(垃圾郵件識別、新聞主題分類)的歷史王者之一。TF-IDF特征 + 線性SVM是經典組合。

  2. 圖像識別

    • 傳統方法:HOG(方向梯度直方圖)特征 + SVM用于行人檢測、物體識別。

    • 深度學習時代:SVM有時用作CNN提取特征后的分類器(雖然現在多被全連接層替代)。

  3. 生物信息學

    • 基因微陣列數據分析(癌癥亞型分類)。

    • 蛋白質結構/功能預測。

  4. 金融風控

    • 信用評分(預測用戶違約風險)。

    • 欺詐交易檢測(識別異常模式)。

  5. 醫學診斷:基于醫學影像(X光、MRI)或病理數據的輔助診斷。

結語:邊界藝術的永恒魅力

支持向量機(SVM)以其優雅的數學形式(最大間隔優化)、巧妙的工程實現(核技巧)以及在眾多領域展現出的強大分類能力,牢牢占據著機器學習"十大經典算法"的重要席位。它教會我們:

  • 大道至簡:最魯棒的決策往往存在于最寬闊的邊界之中(最大間隔原則)。

  • 關鍵少數:系統的核心特性常常由少數關鍵元素決定(支持向量)。

  • 視角轉換:在低維空間無解的難題,轉換到高維視角可能豁然開朗(核技巧)。

雖然深度神經網絡在諸多領域風頭正勁,但在數據量適中、特征維度可控、追求強解釋性和高精度的場景下,SVM依然是工程師和科學家手中一把鋒利而可靠的"大殺器"。理解SVM的原理和實踐,不僅能掌握一項強大的工具,更能深刻領悟機器學習中關于泛化、復雜性與計算效率的永恒平衡藝術。

創作不易,如有收獲請點🌟收藏加關注啦!下期預告:《七天學完十大機器學習經典算法-07.樸素貝葉斯:概率思維的智慧——從“拼線索”到精準預測的完全指南》

上一篇《七天學完十大機器學習經典算法-05.從投票到分類:K近鄰(KNN)算法完全指南》

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

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

相關文章

python如何安裝PyQt6-stubs依賴包

PyQt6-stubs 是為 PyQt6 提供類型提示&#xff08;Type Hints&#xff09;和 IDE 智能補全支持的第三方補丁包&#xff0c;特別適用于 PyCharm、VS Code 等現代 IDE。它對開發者在編碼時幫助極大。 一、安裝方法 需要提前安裝好git&#xff0c;然后克隆PyQt6-stubs源碼&#xf…

創宇智腦 MCP 賦能 AiPy,IP 風險調查效率實現 10 倍飛躍,威脅分析一鍵生成

還記得上個月那個焦頭爛額的凌晨三點嗎&#xff1f;監控大屏突然瘋狂閃爍&#xff0c;500 多個 IP 地址同時出現異常訪問&#xff0c;密密麻麻的數據流在屏幕上跳動&#xff0c;像極了一張讓人窒息的大網。我和團隊成員瞪著布滿血絲的眼睛&#xff0c;手動排查每一個 IP&#x…

使用SRS+ffmpeg實現https推流flv

1修改SRS的live.conf配置如下&#xff1a; # Live streaming config for SRS. # see full.conf for detail config.listen 1935; max_connections 1000; srs_log_tank console; daemon off;http_api {enabled on;listen …

力扣網編程題:合并兩個有序數組(雙指針解法)

一. 簡介 上一篇文章對"合并兩個有序數組"題目&#xff0c;使用了暴力解法&#xff0c;算法時間復雜度比較高。文章如下&#xff1a; 力扣網編程題&#xff1a;合并兩個有序數組&#xff08;直接解法&#xff09;-CSDN博客 本文滿足進階要求&#xff0c;算法時間復…

數據結構之 【樹的簡介】(樹的(相關)概念、二叉樹的概念、部分性質、滿二叉樹、完全二叉樹)

目錄 1.樹的概念及結構 1.1樹的概念 1.2樹的相關概念 1.3樹的表示 1.4樹在實際中的應用 2.二叉樹概念及結構 2.1二叉樹的概念 2.2特殊的二叉樹 2.3二叉樹的性質 2.4應用題 1.樹的概念及結構 1.1樹的概念 樹是一種非線性的數據結構&#xff0c;由 n&#xff08;n…

Redis-7.4.3-Windows-x64下載安裝使用

Redis軟件包下載地址鏈接&#xff1a;https://github.com/redis-windows/redis-windows/releases 檢查或者修改配置文件redis.conf&#xff1a; #如果允許外部其他主機訪問本機redis&#xff0c;設置成&#xff1a;bind 0.0.0.0 bind 127.0.0.1 protected-mode yes #設置端口…

Educational Codeforces Round 180 (Rated for Div. 2)

AB 略 C 對于axayaz>max(2*az,an)&#xff0c;枚舉y z 二分x D 首先&#xff0c;長度為1的邊的已經有n-1條&#xff0c;那么構造的圖中只能存在一條長度為2的好邊。我們先構造出一個圖只存在n-1條好邊&#xff0c;我們發現對于一個點所有連接它的邊要不均指向它要不均背…

CAD文件處理控件Aspose.CAD教程:在 Python 中將 DGN 文件轉換為 PDF

概述 將DGN文件轉換為PDF對許多行業至關重要&#xff0c;包括工程和建筑行業。能夠輕松地以 PDF 格式共享設計&#xff0c;增強協作和可訪問性。通過使用Aspose.CAD for Python via .NET的強大功能&#xff0c;開發人員可以高效地自動化此過程。這款 CAD 轉換器 SDK 簡化了轉換…

寧德時代攜手問界,以“廠中廠”模式加速擴產

6月30日&#xff0c;寧德時代在賽力斯超級工廠的兩條CTP2.0高端電池包產線正式投產。這是寧德時代在重慶布局的首個基地&#xff0c;并首次采用“廠中廠”合作模式&#xff0c;為問界系列車型本地化生產供應動力電池系統。重慶市、四川省廣安市有關負責人&#xff0c;賽力斯集團…

工作中常用的Git操作命令(一)

說明 時間過得真快&#xff0c;一轉眼嗎嘍也是好歹工作幾年了&#xff0c;把這些年平時用的git命令整理記錄一下&#xff0c;分幾個文章&#xff0c;囊括了常用的命令&#xff0c;工作日常很多時候都是使用svn&#xff0c;回到宿舍自己的項目才是git&#xff0c;就問你離不離譜…

2.2.5 Windows系統日志管理

文章目錄 一、試題及考試說明二、操作步驟1. 在計算機策略中&#xff0c;啟用安裝程序的日志記錄&#xff0c;并且配置日志大小最大10M&#xff0c;日志存儲位置為D:\kaoshi_3\2.2.5\&#xff1b;2. 查詢安全日志中登錄失敗的日志信息&#xff0c;并導出保存在D:\kaoshi_3\2.2.…

AiPy實戰(7):一鍵生成天氣組件,解放UI設計的雙手

在傳統 UI 開發流程中&#xff0c;界面設計與實現往往是一項高度依賴人工投入的系統性工作。從頁面布局架構搭建、圖標元素精確定位&#xff0c;到響應式設計適配&#xff0c;僅基礎樣式表&#xff08;CSS&#xff09;的編寫就可能涉及數十行甚至上百行代碼。? 隨著智能開發工…

解讀32頁大數據中心運營管理整體規劃方案【附全文閱讀】

該文檔為大數據中心運營管理整體規劃方案&#xff0c;聚焦于構建高效規范的運營管理體系。方案提出以 “敏前臺、穩中臺、強后臺” 為框架&#xff0c;構建覆蓋全角色、全過程、全周期、全要素的一體化 IT 運營管控體系&#xff0c;采用 “11N” 運營模式&#xff0c;明確業主、…

Pyhton-EXCEL與Mysql數據對比

該段代碼主要實現從數據庫和 Excel 文件中讀取數據&#xff0c;并對兩者進行字段匹配&#xff0c;最終找出 Excel 中未匹配到的數據庫記錄。功能如下&#xff1a; [sqlSelect()]&#xff1a;連接 MySQL 數據庫并查詢比價單及其商品信息。[BiJiaDaoChu()]&#xff1a;調用外部 …

InnoDB索引

1、索引的建立 / 數據的存儲 一條條數據存儲到頁中后&#xff0c;各個數據頁組成了一個雙向鏈表&#xff0c;而每個數據頁中的記錄會按照主鍵值從小到大的順序組成一個單向鏈表。此時&#xff0c;如果我想根據主鍵值查詢一條記錄&#xff0c;只能從第一個數據頁開始一個頁一個頁…

[考研408數據結構]王道大題暑假自用復習記錄(每日更新...)

DAY1 2025年6月29日 雨轉晴&#x1f327;&#x1f324; 第二章 線性表 2.2線性表的順序表示 1、從順序表中刪除具有最小值的元素&#xff08;假設唯一&#xff09;并由函數返回被刪元素的值。空出的位置由最后一個元素填補&#xff0c;若順序表為空&#xff0c;則顯示出錯信…

vue2 el-select下拉選擇框 點擊其他位置或者彈窗關閉下拉框/點擊取消時,下拉框變成之前的值

1.elSelect點擊空白處無法收起下拉框&#xff08;失去焦點并隱藏&#xff09; // 定義指令 directives: {clickOutside: {bind: function (el, binding, vnode) {el.clickOutsideEvent function (event) { // here I check that click was outside the el and his childrensif…

MYSQL-JAVAweb1

1.登錄 在黑框中輸入 net start mysql // 啟動mysql服務 net stop mysql // 停止mysql服務1.MySQL數據模型 關系型數據庫&#xff1a; 關系型數據庫是建立在關系模型基礎上的數據庫&#xff0c;簡單說&#xff0c;關系型數據庫是由多張能互相連接的 二維表 組成的數據庫 如…

將POD指定具體機器上運行

在Kubernetes中&#xff0c;你可以通過多種方式將Pod調度到指定的節點&#xff08;機器&#xff09;上運行。以下是幾種常用的方法及其適用場景&#xff1a; 1. NodeSelector&#xff08;簡單標簽匹配&#xff09; 通過標簽選擇器將Pod綁定到具有特定標簽的節點。 步驟 為目…

eNSP實驗一:IPv4編址及IPv4路由基礎

一、實驗目的&#xff1a; 配置各路由器上的物理接口的IP地址并實現互聯互通配置各路由器的 Loopback 的IP地址并實現互聯互通&#xff08;包括備份路由&#xff0c;默認路由&#xff09;圖中三個路由器型號為 AR3620。 二、配置物理接口ip 基礎配置 設備命名<Huawei>…