《sklearn機器學習——繪制分數以評估模型》驗證曲線、學習曲線

估計器的偏差、方差和噪聲

每一個估計器都有其優勢和劣勢。它的泛化誤差可以分解為偏差、方差和噪聲。估計器的偏差是不同訓練集的平均誤差。估計器的方差表示對不同訓練集,模型的敏感度。噪聲是數據的特質。

在下圖中,可以看見一個函數 f(x)=cos?32πxf(x) = \cos\frac{3}{2}\pi xf(x)=cos23?πx 和函數中的一些噪聲數據。使用三種不同的估計器來擬合函數:帶有自由度為1、4和15的二項式特征的線性回歸。第一個估計器最多只能提供一個樣本與真實函數間不好的擬合,因為該函數太過簡單;第二個估計器估計的很好;最后一個估計器估計訓練數據很好,但是不能擬合真實的函數,例如對各種訓練數據敏感(高方差)。 |

  • Degree 1: MSE = 4.08e-01(+/? 4.25e-01)
  • Degree 4: MSE = 4.32e-02(+/? 7.08e-02)
  • Degree 15: MSE = 1.83e+08(+/? 5.48e+08)

Legend:

  • Blue line: Model
  • Orange line: True function
  • Blue dots: Samples

在這里插入圖片描述

一、驗證曲線

需要一個評分函數(詳見[度量和評分:量化預測的質量])以驗證一個模型,例如分類器的準確率。選擇一個估計器的多個超參數的好方法當然是網格搜索或者相類似的方法(詳見[調整估計器的超參數])通過選擇超參數以使在驗證集或者多個驗證集的分數最大化。需要注意的是:如果基于驗證分數優化超參數,驗證分數是有偏的并且不是好的泛化估計。為了得到一個好的泛化估計,可以通過計算在另一個測試集上的分數。

但是,有時繪制在訓練集上單個參數的影響曲線也是有意義的,并且驗證分數可以找到對于某些超參數,估計器是過擬合還是欠擬合。

validation_score 函數說明

核心思想

validation_score 是一個用于評估機器學習模型在驗證集上性能的通用函數。其核心思想是:使用給定的評分指標(如準確率、F1分數、均方誤差等)來量化模型在未參與訓練的數據(驗證集)上的預測效果,從而幫助判斷模型的泛化能力、避免過擬合,并輔助超參數調優或模型選擇。


參數

參數名類型說明
model模型對象已訓練的機器學習模型(需實現 .predict() 方法)
X_valarray-like驗證集特征數據(二維數組或 DataFrame)
y_valarray-like驗證集真實標簽(一維數組或 Series)
metricstr 或 callable評分指標名稱(如 'accuracy', 'f1', 'mse')或自定義評分函數
**kwargs任意關鍵字參數傳遞給評分函數的額外參數(如 average='weighted' for F1)

注:若 metric 為字符串,函數內部會調用 sklearn.metrics 中對應的評分函數。


返回值

類型說明
float模型在驗證集上的評分結果。值越高通常表示性能越好(誤差類指標如 MSE 則越低越好)。

內部數學形式

根據所選指標不同,數學形式各異。以下是幾個常見示例:

  1. 準確率 (Accuracy)
    Accuracy=1n∑i=1nI(yi=y^i) \text{Accuracy} = \frac{1}{n} \sum_{i=1}^{n} \mathbb{I}(y_i = \hat{y}_i) Accuracy=n1?i=1n?I(yi?=y^?i?)
    其中 I\mathbb{I}I 為指示函數,yiy_iyi? 為真實標簽,y^i\hat{y}_iy^?i? 為預測標簽。

  2. F1 分數 (F1-Score)
    F1=2?Precision?RecallPrecision+Recall \text{F1} = 2 \cdot \frac{\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}} F1=2?Precision+RecallPrecision?Recall?

  3. 均方誤差 (MSE)
    MSE=1n∑i=1n(yi?y^i)2 \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 MSE=n1?i=1n?(yi??y^?i?)2
    函數內部會根據 metric 參數動態選擇并執行對應公式。


簡單示例 Python 代碼

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score# ========== 1. 定義 validation_score 函數 ==========
def validation_score(model, X_val, y_val, metric='accuracy', **kwargs):y_pred = model.predict(X_val)if isinstance(metric, str):metric_func = {'accuracy': accuracy_score,# 可擴展其他指標如 'f1', 'mse' 等}.get(metric, None)if metric_func is None:raise ValueError(f"Unsupported metric: {metric}")return metric_func(y_val, y_pred, **kwargs)elif callable(metric):return metric(y_val, y_pred, **kwargs)else:raise TypeError("metric must be a string or callable")# ========== 2. 生成數據 ==========
X, y = make_classification(n_samples=1000, n_features=4, n_classes=2, random_state=42)
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)# ========== 3. 超參數掃描:C 值范圍 ==========
C_values = np.logspace(-3, 3, 50)  # 從 0.001 到 1000,共50個點
val_scores = []for C in C_values:model = LogisticRegression(C=C, max_iter=1000, random_state=42)model.fit(X_train, y_train)score = validation_score(model, X_val, y_val, metric='accuracy')val_scores.append(score)# ========== 4. 繪制驗證曲線 ==========
plt.figure(figsize=(10, 6))
plt.plot(C_values, val_scores, marker='o', linestyle='-', color='#2E86AB', linewidth=2, markersize=4)
plt.xscale('log')  # C 是對數尺度
plt.xlabel('Regularization Strength (C)', fontsize=12)
plt.ylabel('Validation Accuracy', fontsize=12)
plt.title('Validation Curve: Logistic Regression (C vs Accuracy)', fontsize=14, fontweight='bold')
plt.grid(True, linestyle='--', alpha=0.6)
plt.axvline(x=C_values[np.argmax(val_scores)], color='red', linestyle='--', label=f'Best C = {C_values[np.argmax(val_scores)]:.4f}')
plt.legend()
plt.tight_layout()
plt.show()# ========== 5. 輸出最佳參數和得分 ==========
best_C = C_values[np.argmax(val_scores)]
best_score = max(val_scores)
print(f"? 最佳正則化強度 C = {best_C:.5f}")
print(f"? 最高驗證準確率 = {best_score:.4f}")

輸出示例:

? 最佳正則化強度 C = 1.27427
? 最高驗證準確率 = 0.9450

在這里插入圖片描述

二、學習曲線

一個學習曲線表現的是在不同的訓練樣本個數下估計器的驗證集和訓練集得分。它是一個用于發現增加訓練集數據可以獲得多大收益和是否估計器會遭受更多的方差和偏差。考慮下面的例子中,繪制了樸素貝葉斯分類器和支持向量機的學習曲線。

對于樸素貝葉斯,驗證分數和訓練分數都向某一個分數收斂,隨著訓練集大小的增加,分數下降的很低。因次,并不會從較大的數據集中獲益很多。

與之相對比,小數據量的數據,支持向量機的訓練分數比驗證分數高很多。添加更多的數據給訓練樣本很可能會提高模型的泛化能力。

learning_curve 函數說明(含繪圖示例)

📌 注:此處指 手動實現學習曲線繪制邏輯,非直接調用 sklearn.model_selection.learning_curve(已棄用),而是使用其思想并基于現代 sklearn.model_selection.LearningCurveDisplay 或手動交叉驗證實現。


核心思想

學習曲線(Learning Curve) 用于可視化模型性能隨訓練樣本數量增加的變化趨勢,幫助診斷模型是處于 高偏差(欠擬合) 還是 高方差(過擬合) 狀態:

  • 橫軸:訓練集大小(從少量樣本逐步增加)
  • 縱軸:模型在訓練集和驗證集上的評分(如準確率、F1、負MSE等)
  • 理想情況:兩條曲線最終收斂且差距小 → 模型泛化好
  • 過擬合:訓練得分高,驗證得分低,且兩者差距大
  • 欠擬合:兩條曲線都很低,且很快收斂 → 需要更復雜模型或更多特征

參數(手動實現版本)

參數名類型說明
model模型對象可訓練的估計器(需支持 .fit().predict()
Xarray-like完整特征數據集(將被劃分)
yarray-like完整標簽數據
train_sizeslist or array訓練集大小比例或絕對數量(如 [0.1, 0.3, 0.5, 0.7, 1.0]
cvint交叉驗證折數(默認=5)
metricstr 或 callable評分指標(如 'accuracy', 'neg_mean_squared_error'
random_stateint隨機種子,確保可復現

返回值

類型說明
train_sizes_abs實際使用的訓練樣本數量數組(一維)
train_scores各訓練集大小下,訓練得分矩陣(n_sizes × n_cv)
val_scores各訓練集大小下,驗證得分矩陣(n_sizes × n_cv)

通常后續會計算均值與標準差用于繪圖:

  • train_mean, train_std
  • val_mean, val_std

內部數學形式

對每個訓練集大小 n∈train_sizesn \in \text{train\_sizes}ntrain_sizes

  1. 使用交叉驗證(CV)劃分數據;
  2. 對每一折 CV:
    • 從訓練集中抽取 nnn 個樣本訓練模型;
    • 在該子訓練集上計算得分 → 加入 train_scores[n]
    • 在驗證集上計算得分 → 加入 val_scores[n]
  3. 最終對每個 nnn,得到一組 CV 得分,取平均和標準差。

公式示意(以準確率為例):

Train?Score(n)=1K∑k=1KAccuracy(fn,k,Xtrain(n,k),ytrain(n,k)) \text{Train Score}(n) = \frac{1}{K} \sum_{k=1}^{K} \text{Accuracy}(f_{n,k}, X_{\text{train}}^{(n,k)}, y_{\text{train}}^{(n,k)}) Train?Score(n)=K1?k=1K?Accuracy(fn,k?,Xtrain(n,k)?,ytrain(n,k)?)

Val?Score(n)=1K∑k=1KAccuracy(fn,k,Xval(k),yval(k)) \text{Val Score}(n) = \frac{1}{K} \sum_{k=1}^{K} \text{Accuracy}(f_{n,k}, X_{\text{val}}^{(k)}, y_{\text{val}}^{(k)}) Val?Score(n)=K1?k=1K?Accuracy(fn,k?,Xval(k)?,yval(k)?)

其中fn,kf_{n,k}fn,k? 是在第 kkk 折中使用nnn 個樣本訓練的模型。


示例 Python 代碼(含繪圖)

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_validate, train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import make_scorer, accuracy_score
import warnings
warnings.filterwarnings('ignore')# ========== 1. 手動實現 learning_curve 核心邏輯 ==========
def learning_curve_manual(model, X, y, train_sizes=[0.1, 0.3, 0.5, 0.7, 1.0], cv=5, metric='accuracy', random_state=42):"""手動計算學習曲線數據。返回:train_sizes_abs: 實際訓練樣本數train_scores: 訓練得分矩陣 [n_sizes, n_cv]val_scores: 驗證得分矩陣 [n_sizes, n_cv]"""from sklearn.model_selection import StratifiedKFold, KFoldfrom sklearn.base import clone# 支持分類/回歸if len(np.unique(y)) <= 10:  # 簡單判斷是否為分類cv_obj = StratifiedKFold(n_splits=cv, shuffle=True, random_state=random_state)else:cv_obj = KFold(n_splits=cv, shuffle=True, random_state=random_state)scorer = make_scorer(accuracy_score) if metric == 'accuracy' else Noneif scorer is None:raise NotImplementedError("目前僅支持 'accuracy'")train_scores = []val_scores = []train_sizes_abs = []for size in train_sizes:ts = int(size * len(X)) if isinstance(size, float) else sizetrain_sizes_abs.append(ts)train_scores_fold = []val_scores_fold = []for train_idx, val_idx in cv_obj.split(X, y):# 子采樣訓練集np.random.seed(random_state)sub_train_idx = np.random.choice(train_idx, size=ts, replace=False)X_sub_train = X[sub_train_idx]y_sub_train = y[sub_train_idx]X_val_fold = X[val_idx]y_val_fold = y[val_idx]# 克隆模型避免污染model_clone = clone(model)model_clone.fit(X_sub_train, y_sub_train)# 計算得分y_train_pred = model_clone.predict(X_sub_train)y_val_pred = model_clone.predict(X_val_fold)train_score = accuracy_score(y_sub_train, y_train_pred)val_score = accuracy_score(y_val_fold, y_val_pred)train_scores_fold.append(train_score)val_scores_fold.append(val_score)train_scores.append(train_scores_fold)val_scores.append(val_scores_fold)return np.array(train_sizes_abs), np.array(train_scores), np.array(val_scores)# ========== 2. 生成數據 ==========
X, y = make_classification(n_samples=1000, n_features=4, n_classes=2, random_state=42)# ========== 3. 使用模型 ==========
model = LogisticRegression(max_iter=1000, random_state=42)# ========== 4. 計算學習曲線 ==========
train_sizes = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
train_sizes_abs, train_scores, val_scores = learning_curve_manual(model, X, y, train_sizes=train_sizes, cv=5, metric='accuracy'
)# 計算均值和標準差
train_mean = np.mean(train_scores, axis=1)
train_std = np.std(train_scores, axis=1)
val_mean = np.mean(val_scores, axis=1)
val_std = np.std(val_scores, axis=1)# ========== 5. 繪制學習曲線 ==========
plt.figure(figsize=(10, 6))
plt.plot(train_sizes_abs, train_mean, 'o-', color='#2E86AB', label='Training Accuracy', linewidth=2)
plt.fill_between(train_sizes_abs, train_mean - train_std, train_mean + train_std, alpha=0.2, color='#2E86AB')plt.plot(train_sizes_abs, val_mean, 's-', color='#A23B72', label='Validation Accuracy', linewidth=2)
plt.fill_between(train_sizes_abs, val_mean - val_std, val_mean + val_std, alpha=0.2, color='#A23B72')plt.xlabel('Training Set Size', fontsize=12)
plt.ylabel('Accuracy Score', fontsize=12)
plt.title('Learning Curve: Logistic Regression', fontsize=14, fontweight='bold')
plt.legend()
plt.grid(True, linestyle='--', alpha=0.6)
plt.ylim(0.7, 1.0)  # 根據數據調整
plt.tight_layout()
plt.show()# ========== 6. 輸出關鍵信息 ==========
print("📊 學習曲線數據摘要:")
for i, size in enumerate(train_sizes_abs):print(f"樣本數 {size:4d} → 訓練得分: {train_mean[i]:.4f} ± {train_std[i]:.4f}, "f"驗證得分: {val_mean[i]:.4f} ± {val_std[i]:.4f}")

輸出示例

📊 學習曲線數據摘要:
樣本數  100 → 訓練得分: 0.9800 ± 0.0123, 驗證得分: 0.8500 ± 0.0210
樣本數  200 → 訓練得分: 0.9650 ± 0.0089, 驗證得分: 0.8800 ± 0.0156
樣本數  300 → 訓練得分: 0.9567 ± 0.0072, 驗證得分: 0.9000 ± 0.0123
...
樣本數 1000 → 訓練得分: 0.9350 ± 0.0051, 驗證得分: 0.9300 ± 0.0089

在這里插入圖片描述
輸出圖像描述

你將看到兩條曲線:

  • 藍色線(訓練):起始高,隨樣本增加可能略微下降后穩定。
  • 紫色線(驗證):起始較低,隨樣本增加而上升,逐漸逼近訓練線。
  • 陰影區域:表示交叉驗證的標準差(不確定性區間)。
  • 若兩條線最終接近 → 模型泛化良好;若差距大 → 可能過擬合。

📊 驗證曲線 vs 學習曲線 —— 總結對比

在機器學習模型評估與調優過程中,驗證曲線(Validation Curve)學習曲線(Learning Curve) 是兩個核心診斷工具。它們從不同維度揭示模型行為,幫助我們判斷模型是欠擬合、過擬合,還是表現良好,從而指導下一步優化方向。


🔍 一、核心目標對比

維度驗證曲線(Validation Curve)學習曲線(Learning Curve)
目的分析超參數對模型性能的影響分析訓練樣本數量對模型性能的影響
橫軸超參數值(如 C, max_depth, n_estimators訓練集大小(樣本數或比例)
縱軸模型在驗證集上的評分(如準確率、F1)訓練集 & 驗證集得分
關鍵用途選擇最優超參數判斷是否需要更多數據 / 是否過擬合或欠擬合

📈 二、曲線形態與診斷意義

? 驗證曲線解讀:

  • 曲線呈“單峰” → 存在最優超參數點。
  • 曲線持續上升/下降 → 可能未達最優區間,需擴大搜索范圍。
  • 最高點對應泛化能力最強的超參數配置

🎯 應用示例:調節正則化強度 C,找到使驗證準確率最高的值。


? 學習曲線解讀:

曲線特征含義解決方案
訓練 & 驗證得分都低,且快速收斂高偏差(欠擬合)增加模型復雜度、添加特征、減少正則化
訓練得分高,驗證得分低,差距大高方差(過擬合)增加訓練數據、增加正則化、簡化模型
兩條曲線靠攏,且驗證得分穩定上升理想狀態,可繼續加數據收集更多數據可能進一步提升性能

🎯 應用示例:觀察增加樣本是否能縮小訓練/驗證差距,決定是否值得標注更多數據。


🧩 三、協同使用建議

? 推薦工作流

  1. 先用學習曲線診斷當前模型是否存在根本性偏差或方差問題;
  2. 再用驗證曲線微調超參數,在給定數據量下榨取最佳性能;
  3. 若學習曲線顯示“過擬合”,可在驗證曲線中加大正則化;
  4. 若學習曲線顯示“欠擬合”,可在驗證曲線中降低正則化或換更復雜模型。

💡 二者結合 = 數據效率 + 參數效率 的雙重優化!


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

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

相關文章

2025年AI PPT必修課-匯報中AI相關內容的“陷阱”與“亮點”

《2025年AI PPT必修課-匯報中AI相關內容的“陷阱”與“亮點”》 (適用于方案匯報、戰略PPT、標書/投資人演示)一、內容類坑&#xff08;戰略/趨勢層面&#xff09;? Pitfall (不要寫)? Correct Expression (推薦寫法)Why (原因)還在強調 Caffe / Theano / TF1.x / LSTM采用 P…

Java數據結構 - 順序表模擬實現與使用

目錄1.順序表的基本介紹2.順序表的模擬實現2.1 常見的功能2.2 基本框架2.3 方法的實現2.3.1 add方法2.3.2 size方法2.3.3 display方法2.3.4 add&#xff08;int pos&#xff0c;E data)方法2.3.5 remove方法2.3.6 get方法2.3.7 contain方法2.3.8 indexOf方法2.3.9 set方法2.3.1…

rust語言 (1.88) egui (0.32.1) 學習筆記(逐行注釋)(二十六)windows平臺運行時隱藏控制臺

1、主程序第一句添加&#xff1a; 必須放在所有代碼第一句 #![cfg_attr(windows, windows_subsystem "windows")]2、 編譯命令&#xff1a;cargo build --release3、 編譯完成后運行可執行文件&#xff1a; 項目目錄/target/release/項目名.exe

什么是靜態住宅IP 跨境電商為什么要用靜態住宅IP

靜態住宅IP的定義靜態住宅IP是指由互聯網服務提供商&#xff08;ISP&#xff09;分配給家庭用戶的固定IP地址。與動態IP不同&#xff0c;靜態IP不會頻繁變動&#xff0c;長期保持穩定。其特點包括&#xff1a;固定性&#xff1a;IP地址長期不變&#xff0c;適合需要穩定網絡環境…

RabbitMQ 初步認識

目錄 1. 基本概念 2. RabbitMq 的工作流程 3. 協議 4. 簡單的生產者, 消費者模型 4.1 我們先引入 rabbitmq 的依賴 4.2 生產者 4.3 消費者 1. 基本概念 Pruducer : 生產者, 產生消息Consumer : 消費者, 消費消息Broker : RabbitMq Server, 用來接收和發送消息Connectio…

Redis(46) 如何搭建Redis哨兵?

搭建 Redis 哨兵&#xff08;Sentinel&#xff09;集群&#xff0c;確保 Redis 服務具有高可用性。以下是詳細的步驟&#xff0c;從 Redis 安裝、配置主從復制到配置和啟動 Sentinel 集群&#xff0c;并結合相關的代碼示例。 步驟 1&#xff1a;安裝 Redis 首先&#xff0c;需要…

Grafana 多指標相乘

PromQL中多指標相乘 PromQL表達式&#xff1a; 0.045 * h9_daily_income{coin"nock"} * h9_pool_price_cny{coin"nock"}&#x1f4c8; 基礎&#xff1a;單指標運算 常數與指標相乘 在PromQL中&#xff0c;常數與指標的乘法是最簡單的運算&#xff1a; # ?…

【微服務】springboot3 集成 Flink CDC 1.17 實現mysql數據同步

目錄 一、前言 二、常用的數據同步解決方案 2.1 為什么需要數據同步 2.2 常用的數據同步方案 2.2.1 Debezium 2.2.2 DataX 2.2.3 Canal 2.2.4 Sqoop 2.2.5 Kettle 2.2.6 Flink CDC 三、Flink CDC介紹 3.1 Flink CDC 概述 3.1.1 Flink CDC 工作原理 3.2 Flink CDC…

分布式數據架構

分布式數據架構是一種將數據分散存儲在多臺獨立計算機&#xff08;節點&#xff09;上&#xff0c;并通過網絡協調工作的系統設計。其核心目標是解決海量數據處理、高并發訪問、高可用性及可擴展性等傳統集中式數據庫難以應對的挑戰。以下是關鍵要點解析&#xff1a;一、核心原…

Spark 中spark.implicits._ 中的 toDF和DataFrame 類本身的 toDF 方法

1. spark.implicits._ 中的 toDF&#xff08;隱式轉換方法&#xff09;本質這是一個隱式轉換&#xff08;implicit conversion&#xff09;&#xff0c;通過 import spark.implicits._ 被引入到作用域中。它的作用是為本地 Scala 集合&#xff08;如 Seq, List, Array 等&#…

如何在MacOS上卸載并且重新安裝Homebrew

Homebrew是一款針對macOS操作系統的包管理工具&#xff0c;它允許用戶通過命令行界面輕松安裝、升級和管理各種開源軟件包和工具。Homebrew是一個非常流行的工具&#xff0c;用于簡化macOS系統上的軟件安裝和管理過程。一、卸載 Homebrew方法1&#xff1a;官方卸載腳本&#xf…

如何簡單理解狀態機、流程圖和時序圖

狀態機、流程圖和時序圖都是軟件工程中用來描述系統行為的工具&#xff0c;但它們像不同的“眼鏡”一樣&#xff0c;幫助我們從不同角度看問題。下面用生活比喻來簡單理解思路&#xff1a;狀態機&#xff1a;想象一個交通信號燈。它總是在“紅燈”“黃燈”“綠燈”這些狀態之間…

消失的6個月!

已經6個月沒有更新了 四個月的研一下生活 兩個月暑假&#xff0c;哈哈&#xff0c;其實也沒閑著。每天都有好好的學習&#xff0c;每天學習時長6h 暑假按照導師的指示開始搞項目了&#xff0c;項目是關于RAG那塊中的應用場景&#xff0c;簡單來說就是deepseek puls ,使用大…

Android開發——初步學習Activity:什么是Activity

Android開發——初步學習Activity&#xff1a;什么是Activity ? 在 Android 中&#xff0c;Activity 是一個用于展示用戶界面的組件。每個 Activity 通常對應應用中的一個屏幕&#xff0c;例如主界面、設置界面或詳情頁。Activity 負責處理用戶的輸入事件&#xff0c;更新 UI&…

【左程云算法03】對數器算法和數據結構大致分類

目錄 對數器的實現 代碼實現與解析 1. 隨機樣本生成器 (randomArray) 2. 核心驅動邏輯 (main 方法) 3. 輔助函數 (copyArray 和 sameArray) 對數器的威力 算法和數據結構簡介?編輯 1. 硬計算類算法 (Hard Computing) 2. 軟計算類算法 (Soft Computing) 核心觀點 一個…

MATLAB | 繪圖復刻(二十三)| Nature同款雷達圖

Hello 真的好久不見&#xff0c;這期畫一個Nature同款雷達圖&#xff0c;原圖是下圖中的i圖&#xff0c;長這樣&#xff1a; 本圖出自&#xff1a; Pan, X., Li, X., Dong, L. et al. Tumour vasculature at single-cell resolution. Nature 632, 429–436 (2024). https://d…

React Hooks UseCallback

開發環境&#xff1a;React Native Taro TypescriptuseCallback的用途&#xff0c;主要用于性能優化&#xff1a;1 避免不必要的子組件重渲染&#xff1a;當父組件重渲染時&#xff0c;如果傳遞給子組件的函數每次都是新創建的&#xff0c;即使子組件使用了 React.memo&#…

使用SD為VFX制作貼圖

1.制作遮罩 Gradient Linear 1 通過Blend 可以混合出不同遮罩 2.徑向漸變 Shape 節點 , 非常常用 色階調節灰度和漸變過渡 曲線能更細致調節灰度 色階還可以反向 和圓盤混合 就是 菲涅爾Fresnel 3. 屏幕后處理漸變 第二種方法 4. 極坐標 Gradient Circular Threshold 閾值節…

面經分享二:Kafka、RabbitMQ 、RocketMQ 這三中消息中間件實現原理、區別與適用場景

一、實現原理 (Implementation Principle) 1. Apache Kafka&#xff1a;分布式提交日志 (Distributed Commit Log) Kafka 的核心設計理念是作為一個分布式、高吞吐量的提交日志系統。它不追求消息的復雜路由&#xff0c;而是追求數據的快速、持久化流動。 存儲結構&#xff1a;…

Android開發——初步了解AndroidManifest.xml

Android開發——初步了解AndroidManifest.xml ? AndroidManifest.xml 是 Android 應用的清單文件&#xff0c;包含了應用的包名、組件聲明、權限聲明、API 版本信息等。它是 Android 應用的“說明書”&#xff0c;系統通過它了解應用的結構和行為。咱們的AndroidManifest文件實…