DAY02:【ML 第一彈】KNN算法

一、算法簡介

1.1 算法思想

如果一個樣本在特征空間中的 k 個最相似的樣本中的大多數屬于某一個類別,則該樣本也屬于這個類別。

1.2 樣本相似性

樣本都是屬于一個任務數據集的,樣本距離越近則越相似。

  1. 二維平面上點的歐氏距離
    二維平面上點 a(x1,y1)a(x_1, y_1)a(x1?,y1?)b(x2,y2)b(x_2, y_2)b(x2?,y2?) 間的歐氏距離:
    d12=(x1?x2)2+(y1?y2)2 d_{12} = \sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2} d12?=(x1??x2?)2+(y1??y2?)2?
  2. 三維空間點的歐氏距離
    三維空間點 a(x1,y1,z1)a(x_1, y_1, z_1)a(x1?,y1?,z1?)b(x2,y2,z2)b(x_2, y_2, z_2)b(x2?,y2?,z2?) 間的歐氏距離:
    d12=(x1?x2)2+(y1?y2)2+(z1?z2)2 d_{12} = \sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2 + (z_1 - z_2)^2} d12?=(x1??x2?)2+(y1??y2?)2+(z1??z2?)2?
  3. n維空間點(向量)的歐氏距離
    n維空間點 a(x11,x12,…,x1n)a(x_{11}, x_{12}, \dots, x_{1n})a(x11?,x12?,,x1n?)b(x21,x22,…,x2n)b(x_{21}, x_{22}, \dots, x_{2n})b(x21?,x22?,,x2n?) 間的歐氏距離(兩個n維向量):
    d12=∑k=1n(x1k?x2k)2 d_{12} = \sqrt{\sum_{k=1}^{n} (x_{1k} - x_{2k})^2} d12?=k=1n?(x1k??x2k?)2?

1.3 K值的選擇

1.3.1 大小選擇

  1. K值過小:
  • 即用較小領域中的訓練實例進行預測
  • 易受到異常點的影響
  • 意味著整體模型變得復雜,容易發生過擬合
  1. K值過大:
  • 即用較大領域中的訓練實例進行預測
  • 易受到樣本均衡的問題
  • 意味著整體模型變得簡單,容易發生欠擬合

1.3.2 方法選擇

  • 交叉驗證
  • 網格搜索

1.4 應用方式

1.4.1 分類問題

  1. 計算未知樣本到每一個訓練樣本的距離
  2. 將訓練樣本根據距離大小升序排列
  3. 取出距離最近的 K 個訓練樣本
  4. 進行多數表決,統計 K 個樣本中哪個類別的樣本個數最多
  5. 將未知的樣本歸屬到出現次數最多的類別

1.4.2 回歸問題

  1. 計算未知樣本到每一個訓練樣本的距離
  2. 將訓練樣本根據距離大小升序排列
  3. 取出距離最近的 K 個訓練樣本
  4. 把這個 K 個樣本的目標值計算其平均值
  5. 作為將未知的樣本預測的值

二、API簡介

2.1 分類問題

class sklearn.neighbors.KNeighborsClassifier( n_neighbors=5, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=None 
)

2.1.1 參數說明

  • n_neighbors (int, default=5) :表示K值 ,即預測樣本時考慮的最近鄰的數量。
  • weights ({‘uniform’, ‘distance’} or callable, default=‘uniform’) :權重函數,用于確定在預測時,近鄰樣本對預測結果的影響程度。
    • 'uniform':所有鄰居的權重相同,即每個近鄰樣本在預測中具有同等的影響力。
    • 'distance':權重與距離成反比,意味著距離預測樣本越近的鄰居,對預測結果的影響越大。
    • 自定義一個可調用的函數,根據距離來計算每個鄰居的權重。
  • algorithm ({‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, default=‘auto’) :計算最近鄰的算法。
    • 'brute':暴力搜索算法,它會計算所有樣本之間的距離,然后找出K個最近鄰。
    • 'kd_tree':KD樹算法,是一種對k維空間中的實例點進行存儲以便快速檢索的樹形數據結構,適用于低維數據,一般維數小于20時效果較好。
    • 'ball_tree':球樹算法,通過超球體來劃分樣本空間,每個節點對應一個超球體,相比KD樹在高維數據上表現更優。
    • 'auto':自動選擇最合適的算法,算法會根據訓練數據的規模、特征維度等因素來選擇。
  • leaf_size (int, default=30) :僅在使用'kd_tree''ball_tree'算法時生效,表示KD樹或球樹的葉子節點大小。
  • p (int, default=2) :距離度量的參數,僅當metric='minkowski'時有效。
    • p=1:表示曼哈頓距離(L1范數),計算公式為d(x,y)=∑i=1n∣xi?yi∣d(x,y)=\sum_{i=1}^{n}|x_i - y_i|d(x,y)=i=1n?xi??yi?
    • p=2:表示歐氏距離(L2范數),計算公式為d(x,y)=∑i=1n(xi?yi)2d(x,y)=\sqrt{\sum_{i=1}^{n}(x_i - y_i)^2}d(x,y)=i=1n?(xi??yi?)2?
  • metric (str or callable, default=‘minkowski’) :距離度量類型。
    • 'euclidean'(歐氏距離)
    • 'manhattan'(曼哈頓距離)
    • 'chebyshev'(切比雪夫距離)
    • 'minkowski'(閔可夫斯基距離)
    • 自定義一個可調用的函數,計算樣本之間的距離。
  • metric_params (dict, default=None) :距離度量的額外參數,當使用自定義距離度量函數或者某些需要額外參數的距離度量時使用。
  • n_jobs (int, default=None) :并行計算數。
    • -1,表示使用所有可用的處理器進行并行計算 ,以加快計算速度。
    • 具體的整數,表示使用指定數量的處理器進行并行計算。

2.1.2 常用方法

  • fit(X, y) :用于擬合模型,將訓練數據X(特征矩陣,形狀為(n_samples, n_features))和對應的標簽y(形狀為(n_samples,))輸入該方法,模型會存儲訓練數據。
  • predict(X) :預測輸入數據X(特征矩陣)的類別標簽,返回一個數組,數組中的每個元素是對應樣本的預測類別。
  • predict_proba(X) :返回輸入數據X屬于各類別的概率,返回一個形狀為(n_samples, n_classes)的數組,n_samples是樣本數量,n_classes是類別數量,數組中每個元素[i][j]表示第i個樣本屬于第j個類別的概率。
  • kneighbors((X, n_neighbors, return_distance)) :查找點的K近鄰。
    • X:需要查找近鄰的樣本點(特征矩陣)。
    • n_neighbors:指定查找的近鄰數量,如果不指定,則使用構造函數中設置的n_neighbors值。
    • return_distance:布爾值,默認為True,表示是否返回距離信息。如果為True,會返回兩個數組,第一個數組是查詢點與近鄰點之間的距離,第二個數組是近鄰點在訓練數據中的索引;如果為False,只返回近鄰點在訓練數據中的索引。
  • score(X, y) :返回給定測試數據X和標簽y的平均準確率,即預測正確的樣本數占總樣本數的比例,用于評估模型在測試集上的性能。

2.1.3 代碼實操

# 1. 工具包
from sklearn.neighbors import KNeighborsClassifier, KNeighborsRegressor# 2. 數據
# 分類
x = [[0,2,3],[1,3,4],[3,5,6],[4,7,8],[2,3,4]]
y = [0,0,1,1,0]# 3. 實例化
# 分類
model_1 = KNeighborsClassifier(n_neighbors=3)# 4. 訓練
model_1.fit(x,y)# 5. 預測
print("分類:", model_1.predict([[4,4,5]]))

2.2 回歸問題

class sklearn.neighbors.KNeighborsRegressor(n_neighbors=5,weights='uniform',algorithm='auto',leaf_size=30,p=2,metric='minkowski',metric_params=None,n_jobs=None
)

2.2.1 代碼實操

# 1. 工具包
from sklearn.neighbors import KNeighborsClassifier, KNeighborsRegressor# 2. 數據
# 回歸
m = [[0,1,2],[1,2,3],[2,3,4],[3,4,5]]
n = [0.1,0.2,0.3,0.4]# 3. 實例化
# 回歸
model_2 = KNeighborsRegressor(n_neighbors=3)# 4. 訓練
model_2.fit(m,n)# 5. 預測
print("回歸:", model_2.predict([[4,4,5]]))

三、距離度量方法

3.1 歐氏距離

3.1.1 定義

  • Euclidean Distance 歐氏距離
  • 兩個點在空間中的距離

3.1.2 數學公式

  1. 二維平面上點的歐氏距離
    二維平面上點 a(x1,y1)a(x_1, y_1)a(x1?,y1?)b(x2,y2)b(x_2, y_2)b(x2?,y2?) 間的歐氏距離:
    d12=(x1?x2)2+(y1?y2)2 d_{12} = \sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2} d12?=(x1??x2?)2+(y1??y2?)2?
  2. 三維空間點的歐氏距離
    三維空間點 a(x1,y1,z1)a(x_1, y_1, z_1)a(x1?,y1?,z1?)b(x2,y2,z2)b(x_2, y_2, z_2)b(x2?,y2?,z2?) 間的歐氏距離:
    d12=(x1?x2)2+(y1?y2)2+(z1?z2)2 d_{12} = \sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2 + (z_1 - z_2)^2} d12?=(x1??x2?)2+(y1??y2?)2+(z1??z2?)2?
  3. n維空間點(向量)的歐氏距離
    n維空間點 a(x11,x12,…,x1n)a(x_{11}, x_{12}, \dots, x_{1n})a(x11?,x12?,,x1n?)b(x21,x22,…,x2n)b(x_{21}, x_{22}, \dots, x_{2n})b(x21?,x22?,,x2n?) 間的歐氏距離(兩個n維向量):
    d12=∑k=1n(x1k?x2k)2 d_{12} = \sqrt{\sum_{k=1}^{n} (x_{1k} - x_{2k})^2} d12?=k=1n?(x1k??x2k?)2?

3.2 曼哈頓距離

3.2.1 定義

  • Manhattan Distance 曼哈頓距離
  • City Block Distance 城市街區距離
  • 橫平豎直

3.2.2 數學公式

  1. 二維平面兩點 a(x1,y1)a(x_1,y_1)a(x1?,y1?)b(x2,y2)b(x_2,y_2)b(x2?,y2?) 間的曼哈頓距離:
    d12=∣x1?x2∣+∣y1?y2∣ d_{12} =|x_1 - x_2| + |y_1 - y_2| d12?=x1??x2?+y1??y2?
  2. n維空間點 a(x11,x12,…,x1n)a(x_{11},x_{12},\dots,x_{1n})a(x11?,x12?,,x1n?)b(x21,x22,…,x2n)b(x_{21},x_{22},\dots,x_{2n})b(x21?,x22?,,x2n?) 的曼哈頓距離:
    d12=∑k=1n∣x1k?x2k∣ d_{12} = \sum_{k=1}^{n} |x_{1k} - x_{2k}| d12?=k=1n?x1k??x2k?

3.3 切比雪夫距離

3.3.1 定義

  • Chebyshev Distance 切比雪夫距離
  • 國際象棋中,國王可以直行、橫行、斜行,所以國王走一步可以移動到相鄰8個方格中的任意一個。國王從格子 (x1,y1)(x_1,y_1)(x1?,y1?) 走到格子 (x2,y2)(x_2,y_2)(x2?,y2?) 最少需要的步數

3.3.2 數學公式

  1. 二維平面兩點 a(x1,y1)\text{a}(x_1,y_1)a(x1?,y1?)b(x2,y2)\text{b}(x_2,y_2)b(x2?,y2?) 間的切比雪夫距離:
    d12=max?(∣x1?x2∣,∣y1?y2∣) d_{12} = \max\left(|x_1 - x_2|, |y_1 - y_2|\right) d12?=max(x1??x2?,y1??y2?)
  2. n維空間點 a(x11,x12,…,x1n)\text{a}(x_{11},x_{12},\dots,x_{1n})a(x11?,x12?,,x1n?)b(x21,x22,…,x2n)\text{b}(x_{21},x_{22},\dots,x_{2n})b(x21?,x22?,,x2n?) 的切比雪夫距離:
    d12=max?(∣x1i?x2i∣)(i=1,2,…,n) d_{12} = \max\left(|x_{1i} - x_{2i}|\right) \quad (i = 1,2,\dots,n) d12?=max(x1i??x2i?)(i=1,2,,n)

3.4 閔氏距離

3.4.1 定義

  • Minkowski Distance 閔可夫斯基距離
  • 根據 p 的不同,閔氏距離可表示某一種類的距離

3.4.2 數學公式

兩個n維變量 a(x11,x12,…,x1n)\boldsymbol{a}(x_{11}, x_{12}, \dots, x_{1n})a(x11?,x12?,,x1n?)b(x21,x22,…,x2n)\boldsymbol{b}(x_{21}, x_{22}, \dots, x_{2n})b(x21?,x22?,,x2n?) 間的閔可夫斯基距離定義為:
d12=∑k=1n∣x1k?x2k∣pp d_{12} = \sqrt[p]{\sum_{k=1}^{n} \left| x_{1k} - x_{2k} \right|^p} d12?=pk=1n?x1k??x2k?p?

  • 變參數 p:
    • p=1p = 1p=1 時,退化為曼哈頓距離(Manhattan Distance)
    • p=2p = 2p=2 時,退化為歐氏距離(Euclidean Distance)
    • p→∞p \to \inftyp 時,退化為切比雪夫距離(Chebyshev Distance)

四、特征預處理

4.1 預處理的原因

特征的單位或者大小相差較大,或者某特征的方差相比其他的特征要大出幾個數量級,容易影響(支配)目標結果,使得一些模型(算法)無法學習到其它的特征。

4.2 預處理的方法

4.2.1 歸一化

  1. 定義:通過對原始數據進行變換把數據映射到 [mi, mx](默認為 [0, 1])之間。
  2. 數學公式:
    • X′=x?min?max??min?X' = \frac{x - \min}{\max - \min}X=max?minx?min?
    • X′′=X′?(mx?mi)+miX'' = X' * (mx - mi) + miX′′=X?(mx?mi)+mi
  3. API:sklearn.preprocessing.MinMaxScaler(feature_range=(0,1))
    • feature_range=(min, max):指定歸一化后數據的取值范圍,minmax 為自定義區間上下限。
  4. 特點:
    • 受到最大值和最小值的影響
    • 容易受到異常數據的影響,魯棒性較差
    • 適合傳統精確小數據的場景
  5. 代碼實操:
# 1. 工具包
from sklearn.preprocessing import MinMaxScaler, StandardScaler# 2. 數據
x = [[90, 2, 10, 40], [60, 4, 15, 45], [75, 3, 13, 46]]# 3. 實例化
# 歸一化
process_1 = MinMaxScaler()# 4. 特征處理
res_1 = process_1.fit_transform(x)print("歸一化:", res_1.mean(), res_1.std())

4.2.2 標準化

  1. 定義:通過對原始數據進行標準化,轉換為均值為0、標準差為1的標準正態分布的數據。
  2. 數學公式:
    • X′=x?meanσX' = \frac{x - \text{mean}}{\sigma}X=σx?mean?
    • meanmeanmean:特征平均值
    • σ\sigmaσ:特征標準差
  3. API:sklearn.preprocessing.StandardScaler()
    • with_mean=True:是否中心化(均值為 0)
    • with_std=True:是否縮放(標準差為 1)
  4. 特點:
    • 如果出現異常點,由于具有一定數據量,少量的異常點對于平均值的影響并不大
    • 適合現代嘈雜大數據場景
  5. 代碼實操:
# 1. 工具包
from sklearn.preprocessing import MinMaxScaler, StandardScaler# 2. 數據
x = [[90, 2, 10, 40], [60, 4, 15, 45], [75, 3, 13, 46]]# 3. 實例化
# 標準化
process_2 = StandardScaler()# 4. 特征處理
res_1 = process_1.fit_transform(x)print("標準化:", res_2.mean(), res_2.std())

4.3 代碼實操

4.3.1 利用KNN算法進行鳶尾花分類

# 1. 工具包
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier# 2. 獲取數據集
from sklearn.datasets import load_iris# 3. 加載數據集
iris = load_iris()
# 查看信息
print("信息:", iris.data[:5])
# 查看目標值
print("目標值:", iris.target)
# 查看目標值名字
print("目標值名字:", iris.target_names)
# 查看特征名
print("特征名:", iris.feature_names)
# 查看描述
print("描述:", iris.DESCR)
# 查看文件路徑
print("文件路徑:", iris.filename)# 4. 可視化數據集
# 轉換數據格式為dataframe
iris_df = pd.DataFrame(iris['data'], columns=iris.feature_names)
iris_df['label'] = iris.target
print("dataframe:", iris_df.head())
# 可視化數據
sns.lmplot(x='sepal length (cm)', y='sepal width (cm)', data=iris_df, hue='label', fit_reg=False)
plt.show()# 5. 劃分數據集
X_train, X_test, Y_train, Y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=22)# 6. 模型訓練和預測
# 數據標準化
process = StandardScaler()
X_train = process.fit_transform(X_train)
X_test = process.transform(X_test)
# 模型訓練
model = KNeighborsClassifier(n_neighbors=3)
model.fit(X_train, Y_train)
# 模型評估
model_score = model.score(X_test, Y_test)
print("準確率:", model_score)
# 模型預測
x = [[5.1, 3.5, 1.4, 0.2]]
x = process.transform(x)
y_predict =model.predict(X_test)
print("預測結果:", model.predict(x))
print("預測概率值:", model.predict_proba(x))

4.3.2 利用KNN算法實現手寫數字識別

# 1. 工具包
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
import joblib
from collections import Counter# 2. 加載數據集
digit = pd.read_csv('手寫數字識別.csv')
# 顯示指定的信息
x = digit.iloc[:, 1:]
y = digit.iloc[:, 0]
print("基本信息:", x.shape)
print("類別比例:", Counter(y))
print("第一個數字標簽:", y[0])
# 顯示指定的圖片
digit_ = x.iloc[0].values
digit_ = digit_.reshape(28, 28)
plt.imshow(digit_, cmap='gray')
plt.show()# 3. 歸一化處理
x = digit.iloc[:, 1:] / 255
y = digit.iloc[:, 0]# 4. 劃分數據集
X_train, X_test,Y_train, Y_test = train_test_split(x, y, test_size=0.2, stratify=y, random_state=0)# 5. 模型訓練
model = KNeighborsClassifier(n_neighbors=3)
model.fit(X_train, Y_train)# 6. 模型評估
acc = model.score(X_test, Y_test)
print(f"準確率:{acc:.2f}")# 7. 模型保存
joblib.dump(model, 'KNN.pth')# 8. 模型預測
# 加載測試圖片
img = plt.imread('demo.png')
plt.imshow(img)
plt.show()
# 加載保存后的模型
KNN = joblib.load('KNN.pth')
# 預測測試圖片
y_pred = KNN.predict(img.reshape(1, -1))
print(f"該圖中的數字是:{y_pred}")

五、超參數選擇方法

5.1 交叉驗證

5.1.1 定義

??一種數據集的分割方法,將訓練集劃分為 n 份,拿一份做驗證集(測試集)、其他 n-1 份做訓練集。

5.1.2 原理

(假設數據集劃分為:cv=4

  1. 第一次:把第一份數據做驗證集,其他數據做訓練。
  2. 第二次:把第二份數據做驗證集,其他數據做訓練。
  3. … 以此類推,總共訓練4次,評估4次。
  4. 使用訓練集 + 驗證集多次評估模型,取平均值做交叉驗證為模型得分。
  5. k=5 模型得分最好,再使用全部數據集(訓練集 + 驗證集)對 k=5 模型再訓練一邊,再使用測試集對 k=5 模型做評估。

5.1.3 目的

  • 為了得到更加準確可信的模型評分。

5.2 網格搜索

5.2.1 定義

??模型調參的有力工具,尋找最優超參數的工具!只需要將若干參數傳遞給網格搜索對象,它自動幫我們完成不同超參數的組合、模型訓練、模型評估,最終返回一組最優的超參數。

5.2.2 目的

  • 模型有很多超參數,其能力也存在很大的差異,需要手動產生很多超參數組合,來訓練模型。
  • 每組超參數都采用交叉驗證評估,最后選出最優參數組合建立模型。

5.3 API簡介

sklearn.model_selection.GridSearchCV(estimator,param_grid=None,cv=None,scoring='accuracy',n_jobs=-1
)
  1. 參數:
  • estimator:待調優的模型(如 SVC、RandomForestClassifier)。
  • param_grid:參數字典,格式為{參數名: [取值列表]}。
  • cv:交叉驗證折數(整數或 CV 迭代器)。
  • scoring:評估指標(如accuracyf1roc_auc)。
  • n_jobs:并行計算的 CPU 核心數,-1表示全部使用。
  1. 方法:
  • fit(X, y):執行網格搜索和交叉驗證。
  • predict(X):使用最佳模型預測。
  • best_params_:最佳參數組合。
  • best_score_:最佳模型在驗證集上的平均分數。
  • cv_results_:所有參數組合的詳細結果。

5.4 代碼實操——利用KNN算法進行鳶尾花分類(2)

# 1. 工具包
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, classification_report# 2. 加載數據集
iris = load_iris()# 3. 劃分數據集
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)# 4. 特征預處理
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)# 5. 模型實例化 + 交叉驗證 + 網格搜索
model = KNeighborsClassifier(n_neighbors=1)
param_grid = {'n_neighbors': [3, 4, 5, 6, 7, 8, 9]}
grid_search = GridSearchCV(estimator=model,param_grid=param_grid,cv=4,scoring='accuracy',n_jobs=-1
)
grid_search.fit(X_train, y_train)
# 最優參數和最佳模型性能
print(f"最佳參數: {grid_search.best_params_}")
print(f"交叉驗證最佳準確率: {grid_search.best_score_:.4f}")
# 6. 使用最優參數的模型進行預測
best_model = grid_search.best_estimator_
y_pred = best_model.predict(X_test)
# 模型評估
accuracy = accuracy_score(y_test, y_pred)
print(f"測試集準確率: {accuracy:.4f}")
# 分類報告
print("分類報告:")
print(classification_report(y_test, y_pred, target_names=iris.target_names))
# 對新樣本進行預測
new_sample = [[5.1, 3.5, 1.4, 0.2]]
new_sample_scaled = scaler.transform(new_sample)
predicted_class = best_model.predict(new_sample_scaled)
predicted_probabilities = best_model.predict_proba(new_sample_scaled)
print(f"預測樣本類別: {iris.target_names[predicted_class][0]}")
print(f"各類別概率: {[f'{p:.4f}' for p in predicted_probabilities[0]]}")

微語錄:若不趁著風時揚帆,船是不會前進的。——東野圭吾

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

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

相關文章

wpf 實現窗口點擊關閉按鈕時 ??隱藏?? 而不是真正關閉,并且只有當 ??父窗口關閉時才真正退出?? 、父子窗口順序控制與資源安全釋放?

文章目錄實現方法**方法 :重寫 OnClosing 方法****子窗口(SettingView)代碼****父窗口(MainWindow)代碼****關鍵點****適用場景**為什么if (Owner null || !Owner.IsLoaded)能夠判斷父窗口已經關閉**1. Owner null 檢…

硬件設計學習DAY4——電源完整性設計:從概念到實戰

每日更新教程,評論區答疑解惑,小白也能變大神!" 目錄 一.電源完整性 1.1電源完整性的核心概念 1.2電源完整性的三個關鍵目標 1.3地彈現象的通俗解釋 1.4總結要點 二.電源分配網絡(PDN)的作用 電源與GND網絡…

QT跨平臺應用程序開發框架(8)—— 多元素控件

目錄 一,關于多元素控件 二,QListWidget 2.1 主要方法 2.2 實現新增刪除 三,Table Widget 3.1 主要方法 3.2 代碼演示 四,Tree Widget 4.1 主要方法 4.2 代碼演示 一,關于多元素控件 多元素控件就是一個控件里面包含了…

【React Native】環境變量和封裝 fetch

環境變量和封裝fetch 環境變量 一般做開發,都會將接口地址配置到環境變量里。在Expo建的項目里,也可以使用環境變量。 在項目根目錄新建一個.env文件,里面添加上: EXPO_PUBLIC_API_URLhttp://localhost:3000如果你用手機真機等…

Linux 基礎命令詳解:從入門到實踐(1)

Linux 基礎命令詳解:從入門到實踐(1) 前言 在 Linux 操作系統中,命令行是高效管理系統、操作文件的核心工具。無論是開發者、運維工程師還是Linux愛好者,掌握基礎命令都是入門的第一步。本文將圍繞Linux命令的結構和常…

基于 SpringBoot+VueJS 的私人牙科診所管理系統設計與實現

基于 SpringBootVueJS 的私人牙科診所管理系統設計與實現摘要隨著人們對口腔健康重視程度的不斷提高,私人牙科診所的數量日益增多,對診所管理的信息化需求也越來越迫切。本文設計并實現了一個基于 SpringBoot 和 VueJS 的私人牙科診所管理系統&#xff0…

華為云Flexus+DeepSeek征文|體驗華為云ModelArts快速搭建Dify-LLM應用開發平臺并創建天氣預報大模型

華為云FlexusDeepSeek征文|體驗華為云ModelArts快速搭建Dify-LLM應用開發平臺并創建天氣預報大模型 什么是華為云ModelArts 華為云ModelArts ModelArts是華為云提供的全流程AI開發平臺,覆蓋從數據準備到模型部署的全生命周期管理,幫助企業和開…

Mysql系列--0、數據庫基礎

目錄 一、概念 1.1什么是數據庫 1.2什么是mysql 1.3登錄mysql 1.4主流數據庫 二、Mysql與數據庫 三、Mysql架構 四、SQL分類 五、存儲引擎 5.1概念 5.2查看引擎 5.3存儲引擎對比 一、概念 1.1什么是數據庫 由于文件保存數據存在文件的安全性問題 文件不利于數據查詢和管理…

深度學習和神經網絡的介紹

一.前言本期不涉及任何代碼,本專欄剛開始和大家介紹了一下機器學習,而本期就是大家介紹一下深度學習還有神經網絡,作為一個了解就好。二.深度學習2.1 什么是深度學習?在介紹深度學習之前,我們先看下??智能&#xff0…

AI驅動的軟件工程(下):AI輔助的質檢與交付

📚 系列文章導航 AI驅動的軟件工程(上):人機協同的設計與建模 AI驅動的軟件工程(中):文檔驅動的編碼與執行 AI驅動的軟件工程(下):AI輔助的質檢與交付 大家好…

【WRFDA實操第一期】服務器中安裝 WRFPLUS 和 WRFDA

目錄在服務器上下載并解壓 WRF v4.6.1編譯 WRFDA 及相關庫安裝和配置所需庫安裝 WRFPLUS 和 WRFDA 以運行 4DVAR 數據同化一、安裝 WRFPLUS(適用于 WRF v4.0 及以上版本)二、安裝 WRFDA(用于 4DVAR)WRFDA 和 WRFPLUS 的安裝說明另…

【機器學習【6】】數據理解:數據導入、數據審查與數據可視化方法論

文章目錄一、機器學習數據導入1、 Pandas:機器學習數據導入的最佳選擇2、與其他方法的差異二、機器學習數據理解的系統化方法論1、數據審查方法論:六維數據畫像技術維度1:數據結構審查維度2:數據質量檢查維度3:目標變量…

AI煉丹日志-30-新發布【1T 萬億】參數量大模型!Kimi?K2開源大模型解讀與實踐

點一下關注吧!!!非常感謝!!持續更新!!! 🚀 AI篇持續更新中!(長期更新) AI煉丹日志-29 - 字節跳動 DeerFlow 深度研究框斜體樣式架 私…

如何關閉Elasticsearch的安全認證的解決方法

在Elasticsearch 中,啟動之后,需要輸入用戶名和密碼,才可以訪問,在測試環境中,很不方便,本章教程,主要介紹如何關閉Elasticsearch 的安全認證。在 Elasticsearch 8.x / 9.x 中,默認是…

day051-ansible循環、判斷與jinja2模板

文章目錄0. 老男孩思想-男女性需求差異1. 手動指定客戶機密碼2. 批量更新主機名2.1 hostname模塊2.2 添加主機清單變量2.3 編寫批量修改主機名劇本2.4 修改hosts文件2.5 分發hosts文件劇本3. ansible的并行進程數4. 分組設置主機密碼-主機清單分組變量5. 案例:ansib…

大模型安全建設:破誤區、識風險、筑防線20250714

🔐 大模型安全建設:破誤區、識風險、筑防線作者:Narutolxy|編輯時間:2025年7月在負責公司 AI 產品落地的過程中,一度以為只要選用主流開源大模型,前面加一層“敏感詞提示詞過濾”,就…

fastadmin中ajax彈窗修改文字為英文

需要把上圖的中文改為 切換語言自動切換成英文找到這個文件public/assets/js/backend.js找到如下圖部分 // //點擊包含.btn-ajax的元素時發送Ajax請求 原頁面// $(document).on(click, .btn-ajax,.ajaxit, function (e) {// var that this;// var options $.exte…

大型語言模型(LLM)的技術面試題

大型語言模型(LLM)的技術面試題 目錄 大型語言模型(LLM)的技術面試題 一、提示校準:減輕提示學習中的偏見 二、矢量存儲的適用場景 三、模型與人類價值觀對齊的技術 四、RLHF中的Reward Hacking 五、微調效果的關鍵影響因素:預訓練模型架構與大小 六、Transformer自注意力…

數字IC后端培訓教程之數字IC后端項目典型問題解析

今天給大家分享下最近幾個典型的數字后端項目案例,希望對大家的學習和工作有所幫助。 數字IC后端培訓教程之數字后端項目典型項目案例解析 Q1:星主,有啥辦法可以看到refinePlace或者ecoPlace都動到了那些inst嗎,log里只會有mean和max move&…

網絡(數據庫1)

常用數據庫: 1.關系型數據庫: 將復雜的數據結構簡化為二維表格形式 大型:0racle、DB2 中型:MySq1、sQLServer 小型:Sqlite 2.非關系型數據庫以鍵值對存儲,且結構不固定。//JSON Redis MongoDB數據存儲:變量、數組、鏈表 內存 &…