基于python的機器學習(五)—— 聚類(二)

一、k-medoids聚類算法

k-medoids是一種聚類算法,它是基于k-means聚類算法的一種改進。k-medoids算法也是一種迭代算法,但是它將中心點限定為數據集中的實際樣本點,而不是任意的點。

具體來說,k-medoids算法從數據集中選擇k個初始中心點,然后將數據集中的每個樣本分配給最近的中心點,并計算每個中心點的總距離。接下來,算法會嘗試用一個未被選中的樣本替換每個中心點,并計算新的總距離,選擇總距離最小的替換。重復這個過程,直到中心點的位置不再改變或達到預定的迭代次數。

1.1 k-medoids與k-means算法的異同點

k-medoids算法是k-means算法的一個變種,它們都是聚類算法,但在一些方面有所不同。

相同點:

  1. 目標函數:k-medoids和k-means算法的目標都是將數據點劃分到k個簇中,使得簇內的數據點相似度最大化,簇間的相似度最小化。
  2. 選擇中心點:k-medoids和k-means算法都需要選擇k個中心點作為初始點,然后通過迭代算法來更新中心點,直到收斂。
  3. 簇分配:k-medoids和k-means算法都是通過計算數據點與中心點之間的距離來確定數據點的簇分配。

不同點:

  1. 中心點的選擇:k-medoids算法選擇的中心點必須是實際數據點,而k-means算法的中心點可以是任意點。
  2. 距離度量:k-medoids算法使用的是曼哈頓距離(或其他適合計算離散特征的距離度量),而k-means算法使用的是歐幾里德距離(適用于計算連續特征的距離度量)。
  3. 簇的劃分:k-medoids算法的簇劃分更加穩定,因為每個簇的中心點必須是實際數據點,而k-means算法的簇劃分可能會受到初始點的選擇影響,可能會得到不同的結果。
  4. 計算復雜度:k-medoids算法的計算復雜度要高于k-means算法,因為它需要計算每個數據點到中心點的距離,并選擇最近的中心點作為簇分配。

1.2 k-medoids算法原理和實例

k-medoids算法是一種聚類算法,它的原理是通過將數據集中的每個數據點分配給最近的一個中心點,然后重新計算每個中心點的位置,直到達到收斂的效果為止。

下面是k-medoids算法的步驟:

  1. 初始化k個中心點,可以隨機選擇k個數據點作為中心點。
  2. 對于每個數據點,計算其到所有中心點的距離,將它分配給距離最近的中心點。
  3. 對于每個中心點,計算它與其他被分配給它的數據點的總距離,選擇具有最小總距離的數據點作為新中心點。
  4. 重復步驟2和步驟3,直到中心點不再改變或達到最大迭代次數。

下面是一個簡單的示例代碼來實現k-medoids算法

import numpy as npdef k_medoids(X, k):# 隨機初始化質心m, n = X.shapecentroids_idx = np.random.choice(m, size=k, replace=False)centroids = X[centroids_idx]# 迭代更新質心max_iter = 100for _ in range(max_iter):# 分配每個樣本到最近的質心distances = np.linalg.norm(X[:, np.newaxis] - centroids, axis=2)labels = np.argmin(distances, axis=1)# 更新質心為最小代價for i in range(k):cluster_X = X[labels == i]cluster_distances = np.linalg.norm(cluster_X[:, np.newaxis] - cluster_X, axis=2)costs = np.sum(cluster_distances, axis=1)best_idx = np.argmin(costs)centroids[i] = cluster_X[best_idx]return centroids, labels# 示例用法
X = np.array([[1, 2], [2, 1], [3, 2], [9, 10], [10, 9], [11, 10]])
k = 2
centroids, labels = k_medoids(X, k)print("質心:")
print(centroids)
print("標簽:")
print(labels)

該示例代碼中,X是輸入數據的特征矩陣,k是聚類的類別數。k_medoids函數使用k-medoids算法進行聚類。它首先隨機選擇k個樣本作為質心,然后迭代更新質心和樣本的分配,直到達到最大迭代次數為止。最后返回最終的質心和樣本的標簽。

1.3 k-medoids聚類算法的優缺點

k-medoids聚類算法是一種基于劃分的聚類算法,優點和缺點如下:

優點:

  1. 不受離群值的影響:k-medoids聚類算法使用實際數據點作為聚類中心(medoids),因此對離群值不敏感。這使得k-medoids算法在處理存在離群值的數據集時表現較好。
  2. 適用于任意距離度量:k-medoids算法可以使用任意距離度量來計算數據點之間的相似度,因此可以適用于各種類型的數據集。這使得k-medoids算法在處理非歐幾里德空間的數據時具有靈活性。
  3. 可解釋性:k-medoids算法生成的聚類結果直觀易懂,因為每個聚類中心都是數據集中實際存在的數據點。

缺點:

  1. 對初始聚類中心的敏感性:k-medoids算法對初始聚類中心的選擇非常敏感,不同的初始中心可能會導致不同的聚類結果。因此,為了獲取穩定和準確的聚類結果,需要使用合適的初始聚類中心選擇方法。
  2. 計算復雜度高:k-medoids算法的計算復雜度較高,特別是在處理大規模數據集時。因為算法需要計算每個數據點到每個聚類中心的距離,并且在每一次迭代中都需要重新選擇最優的聚類中心。

1.4 k-medoids聚類算法的代碼實現

Sklearn 的正式發行版 0.22 并沒有提供 k-medoids 聚類模塊,但在 GitHub網站中,可下載 k-medoids聚類模塊的測試版,網址為https://github.com/terkkila/scikit-learn/tree/kmedoids/sklearn/clusterhttps://github.com/terkkila/scikit-learn/tree/kmedoids/sklearn/cluster在該頁面中,需要下載_ _init_ _.pyk_medoids_.py兩個文件,將其復制到 X:\Anaconda3\lib\site-packages\sklearn\cluster 目錄下(會替換掉原來的_ _init_ _.py文件),即可使用 k_medoids 聚類模塊。
k-medoids 聚類模塊實際上是一個 k_medoids類,k_medoids類的使用方法和 k-means類很相似,它的構造函數的參數有:①簇的個數 n_clusters;②初始簇中心的獲取方法 init();③獲取初始簇中心的更迭次數 n_init。

用 k_medoids聚類算法將數據聚成2類(數據文件km.txt)。

km.txt?文件內容如下:(與上篇文章中的相同)

import numpy as np
import matplotlib.pyplot as plt
from pyclust import KMedoids
import treelibX1, X2 = [], []
fr = open('km.txt')
for line in fr.readlines():lineArr = line.strip().split()X1.append([int(lineArr[0])])X2.append([int(lineArr[1])])
X = np.array(list(zip(X1, X2))).reshape(len(X1), 2)model = KMedoids(2).fit(X)        # 調用估計器fit()方法進行聚類,聚類數為2
colors = ['b', 'g', 'r', 'c']
markers = ['o', 's', 'x', 'o']for i, l in enumerate(model.labels_):plt.plot(X1[i], X2[i], color=colors[l], marker=markers[i], ls='None')# 下面用X形繪制中心點
centroids = model.cluster_centers_            # centroids保存了所有中心點for i in range(2):plt.plot(centroids[i][0], centroids[i][1], markers[2])
plt.show()

二、DBSCAN聚類算法

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一種基于密度的聚類算法。它通過將數據點劃分為核心點、邊界點和噪音點來進行聚類。DBSCAN算法的基本思想是尋找具有足夠密度的數據點,將它們劃分為一個簇,并通過連接具有足夠密度的相鄰數據點來擴展該簇。

2.1 DBSCAN聚類算法中的幾個定義

  1. ?-領域:?-領域是指一個點周圍半徑為?的范圍內的所有點的集合。具體地說,對于給定的一個點p,其?-領域包括了所有與p的距離小于等于?的點。
  2. 核心對象:核心對象是指一個數據點,如果在指定的半徑r內至少有minPts個數據點,則該數據點被視為核心對象。具體來說,一個核心對象需要滿足以下兩個條件:
    1. 這些數據點必須是在半徑r內的,即它們之間的距離必須小于等于r。
    2. 在半徑r內至少有minPts個數據點,包括自身。
  3. 密度可達:對于DBSCAN算法中的一個樣本點p,如果存在樣本點q,使得q在p的ε領域內,并且q的密度達到了MinPts的要求,那么我們稱q在以p為中心的ε領域內與p密度可達。而如果存在一系列樣本點p1,p2,...,pn,使得p1與p2密度可達,p2與p3密度可達,...,pn-1與pn密度可達,那么我們稱pn在以p1為中心的ε領域內與p1密度可達。
  4. 直接密度可達:對于DBSCAN算法中的一個樣本點A,如果在半徑ε內存在另一個樣本點B,且B在A的ε-鄰域內,即距離A小于等于ε,則樣本點A的直接密度可達于樣本點B。

2.2 DBSCAN聚類算法步驟

DBSCAN (Density-Based Spatial Clustering of Applications with Noise) 是一種聚類算法,用于在基于密度的空間中發現聚類。

DBSCAN算法的步驟如下:

  1. 初始化參數:設置半徑ε和最小點數MinPts。
  2. 計算密度:對于數據集中的每個數據點,計算它的ε-鄰域內的點的數量。如果該數量大于等于MinPts,則將該點標記為核心點。
  3. 標記邊界點:對于每個核心點,將其ε-鄰域內的點(不包括核心點)標記為邊界點。
  4. 構建聚類:初始化一個空的聚類集合,并對每個核心點執行以下步驟: a. 如果該核心點尚未被訪問過,則創建一個新的聚類,并將其加入到聚類集合中。 b. 將該核心點加入到當前聚類中。 c. 對于該核心點的ε-鄰域內的所有點,如果該點是核心點,則將其加入到當前聚類中;如果該點是邊界點且尚未被訪問過,則將其加入到當前聚類中,并標記為已訪問。
  5. 標記噪音點:對于所有未被訪問過的點,如果其不屬于任何聚類,則將其標記為噪音點。
  6. 輸出結果:返回聚類集合。

2.3 DBSCAN聚類算法舉例

假設有一組二維數據點,如下所示:

數據點1:(2, 3) 數據點2:(4, 5) 數據點3:(6, 7) 數據點4:(9, 10) 數據點5:(11, 12) 數據點6:(13, 14) 數據點7:(15, 16) 數據點8:(16, 17) 數據點9:(18, 19)

首先,我們需要選擇兩個參數:鄰域半徑eps和最小密度minPts。鄰域半徑eps決定了一個點的鄰域范圍,而最小密度minPts決定了一個核心點所需要的鄰域內的最小數據點數。

假設我們選擇eps=2和minPts=3,然后進行DBSCAN聚類算法。

  1. 隨機選擇一個未訪問的數據點,比如數據點1。
  2. 檢查數據點1的鄰域內是否有至少minPts個數據點。
    • 數據點2和數據點3在數據點1的鄰域內,那么數據點1為核心點,并且將數據點2和數據點3添加到同一個簇中。
    • 數據點4、數據點5、數據點6和數據點7不在數據點1的鄰域內,不滿足最小密度要求。
    • 數據點8和數據點9不在數據點1的鄰域內,不滿足最小密度要求。
  3. 隨機選擇一個未訪問的核心點,比如數據點2。
  4. 檢查數據點2的鄰域內是否有至少minPts個數據點。
    • 數據點3在數據點2的鄰域內,那么數據點2為核心點,并且將數據點3添加到同一個簇中。
    • 數據點1不在數據點2的鄰域內,不滿足最小密度要求。
  5. 隨機選擇一個未訪問的核心點,比如數據點3。
  6. 檢查數據點3的鄰域內是否有至少minPts個數據點。
    • 數據點2在數據點3的鄰域內,那么數據點3為核心點,并且將數據點2添加到同一個簇中。
    • 數據點1不在數據點3的鄰域內,不滿足最小密度要求。
  7. 繼續選擇下一個未訪問的核心點,并進行相同的操作,直到所有的核心點都被訪問過為止。
  8. 如果還有未訪問的數據點,則將其標記為噪聲點。

根據上述步驟,我們可以得到以下聚類結果:

  • 簇1:數據點1、數據點2、數據點3
  • 噪聲點:數據點4、數據點5、數據點6、數據點7、數據點8、數據點9

2.4 DBSCAN聚類算法的優缺點

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)聚類算法的優點和缺點如下:

優點:

  • 不需要事先指定聚類數量,能夠自動發現數據中的聚類。
  • 能夠處理任意形狀的聚類,并且對噪聲數據具有較強的魯棒性。
  • 對于較大的數據集,DBSCAN算法具有較高的計算效率。
  • 對于具有不同密度的聚類,DBSCAN能夠自適應地調整聚類的形狀和大小。

缺點:

  • 對于高維數據,DBSCAN聚類算法表現不佳,容易出現維度災難。
  • 對于數據集中密度不均勻的聚類,DBSCAN算法可能難以找到合適的聚類結果。
  • 對于數據集中聚類之間存在較大密度差距的情況,DBSCAN算法可能無法準確地劃分聚類。
  • 對于數據集的參數選擇較為敏感,需要事先對參數進行調優。

2.5 Sklearn實現DBSCAN聚類算法

使用sklearn庫實現DBSCAN聚類算法對三維點進行聚類的示例代碼:

from sklearn.cluster import DBSCAN
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt# 生成示例數據集
np.random.seed(0)
n_samples = 150
X = np.random.randn(n_samples, 3)# 使用DBSCAN聚類算法進行聚類
dbscan = DBSCAN(eps=0.4, min_samples=10)
y_pred = dbscan.fit_predict(X)# 繪制聚類結果
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
colors = ['blue', 'green', 'red', 'purple', 'yellow']
for i in range(len(np.unique(y_pred))):ax.scatter(X[y_pred == i, 0], X[y_pred == i, 1], X[y_pred == i, 2], c=colors[i], label='Cluster {}'.format(i))
ax.set_xlabel('Feature 1')
ax.set_ylabel('Feature 2')
ax.set_zlabel('Feature 3')
ax.set_title('DBSCAN Clustering')
plt.legend()
plt.show()

在上述代碼中,我們使用np.random.randn函數生成了一個包含150個三維點的示例數據集。然后,我們使用DBSCAN類初始化了一個DBSCAN聚類算法的實例,并指定了epsmin_samples參數。最后,我們調用fit_predict方法對數據進行聚類,并將聚類結果繪制在三維散點圖中。

三、OPTICS聚類算法

OPTICS(Ordering Points To Identify the Clustering Structure)是一種基于密度的聚類算法,它通過識別數據集中的密度相對較高的區域來發現聚類結構。與傳統的基于密度的聚類算法DBSCAN不同,OPTICS不需要設置鄰域大小參數,而是通過自適應地計算鄰域大小來進行聚類

OPTICS算法的基本思想是,對于數據集中的每個點,計算它與其他點之間的距離,然后根據距離將數據點排序。通過這種排序方式,OPTICS算法可以在每個數據點的鄰域中找到密度相對較高的數據點,從而識別出聚類的結構。

OPTICS算法的輸出結果是一個可達距離圖(Reachability Plot),它可以用于確定聚類的閾值參數,從而將數據點分為不同的聚類簇。通過分析可達距離圖,可以識別出密度相對較高的聚類簇和稀疏區域。

OPTICS算法的主要步驟如下:

  1. 計算每個數據點與其他點之間的距離,構建距離矩陣。
  2. 根據距離矩陣,計算每個數據點的核心距離(core distance)。核心距離是一個自適應的鄰域大小,用于判斷一個點是否是核心點(core point)。
  3. 根據核心距離和距離矩陣,計算每個數據點的可達距離(reachability distance)。可達距離表示從一個數據點到另一個數據點的最短路徑的最大距離。
  4. 根據可達距離,構建可達距離圖。
  5. 分析可達距離圖,確定聚類的閾值參數,將數據點分為不同的聚類簇。

3.1 Sklearn實現OPTICS聚類算法

使用sklearn庫中的cluster.OPTICS類來實現OPTICS聚類算法。

下面是一個使用sklearn庫實現OPTICS聚類算法的示例代碼:

from sklearn.cluster import OPTICS
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt# 生成示例數據
X, y = make_blobs(n_samples=200, centers=4, random_state=0)# 創建OPTICS聚類模型
optics = OPTICS(min_samples=10, xi=0.05, min_cluster_size=0.1)# 擬合數據
optics.fit(X)# 獲取聚類標簽
labels = optics.labels_# 獲取核心樣本的可達距離
reachability_distances = optics.reachability_# 繪制聚類結果
unique_labels = set(labels)
colors = [plt.cm.Spectral(each) for each in np.linspace(0, 1, len(unique_labels))]for label, color in zip(unique_labels, colors):if label == -1:color = [0, 0, 0, 1]  # 將噪聲樣本用黑色表示class_member_mask = (labels == label)xy = X[class_member_mask]plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(color),markeredgecolor='k', markersize=14)# 顯示聚類結果
plt.title('OPTICS clustering')
plt.show()

在上述示例代碼中,make_blobs函數用于生成示例數據。OPTICS類是OPTICS聚類算法的實現類,通過調用fit方法可以擬合數據并進行聚類。labels_屬性用于獲取聚類標簽。reachability_屬性用于獲取核心樣本的可達距離。

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

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

相關文章

解釋:指數加權移動平均(EWMA)

指數加權移動平均(EWMA, Exponential Weighted Moving Average) 是一種常用于時間序列平滑、異常檢測、過程控制等領域的統計方法。相比普通移動平均,它對最近的數據賦予更高權重,對舊數據逐漸“淡化”。 ? 一、通俗理解 想象你…

Spring Boot 項目基于責任鏈模式實現復雜接口的解耦和動態編排!

全文目錄: 開篇語前言一、責任鏈模式概述責任鏈模式的組成部分: 二、責任鏈模式的核心優勢三、使用責任鏈模式解耦復雜接口1. 定義 Handler 接口2. 實現具體的 Handler3. 創建訂單對象4. 在 Spring Boot 中使用責任鏈模式5. 配置責任鏈6. 客戶端調用 四、…

COMSOL仿真遇到的兩個小問題

最近跑熱仿真的時候跑出了兩個問題,上網查發現也沒什么解決方式,最后自己誤打誤撞的摸索著解決了,在這里分享一下。 問題一 我當時一準備跑仿真就彈出了這個東西,但在此之前從未遇到 然后我試著在它說的路徑中建立recoveries文件…

如何在英文學術寫作中正確使用標點符號?

標點符號看似微不足道,但它們是書面語言的無名英雄。就像熟練的指揮家指揮管弦樂隊一樣,標點符號可以確保您的寫作流暢、傳達正確的含義并引起讀者的共鳴。正如放錯位置的音符會在音樂中造成不和諧一樣,放錯位置的逗號或缺少分號也會使您的寫…

【深度學習與大模型基礎】第10章-期望、方差和協方差

一、期望 ——————————————————————————————————————————— 1. 期望是什么? 期望(Expectation)可以理解為“長期的平均值”。比如: 擲骰子:一個6面骰子的點數是1~6&#x…

JAVA虛擬機(JVM)學習

入門 什么是JVM JVM:Java Virtual Machine,Java虛擬機。 JVM是JRE(Java Runtime Environment)的一部分,安裝了JRE就相當于安裝了JVM,就可以運行Java程序了。JVM的作用:加載并執行Java字節碼(.class&#…

【數據結構與算法】——堆(補充)

前言 上一篇文章講解了堆的概念和堆排序,本文是對堆的內容補充 主要包括:堆排序的時間復雜度、TOP 這里寫目錄標題 前言正文堆排序的時間復雜度TOP-K 正文 堆排序的時間復雜度 前文提到,利用堆的思想完成的堆排序的代碼如下(包…

什么是柜臺債

柜臺債(柜臺債券業務)是指通過銀行等金融機構的營業網點或電子渠道,為投資者提供債券買賣、托管、結算等服務的業務模式。它允許個人、企業及機構投資者直接參與銀行間債券市場的交易,打破了以往僅限機構參與的壁壘。以下是綜合多…

【Android讀書筆記】讀書筆記記錄

文章目錄 一. Android開發藝術探索1. Activity的生命周期和啟動模式1.1 生命周期全面分析 一. Android開發藝術探索 1. Activity的生命周期和啟動模式 1.1 生命周期全面分析 onPause和onStop onPause后會快速調用onStop,極端條件下直接調用onResume 當用戶打開新…

Java對象內存結構詳解

Java對象內存結構詳解 Java對象在JVM內存中的存儲結構可以分為三個部分:對象頭(Header)、實例數據(Instance Data)和對齊填充(Padding)。以下是64位JVM(開啟壓縮指針)下…

【TI MSPM0】Printf重定向學習

一、新建工程 通過XDS110與電腦進行通信。 選擇這兩個引腳 需要添加這兩個頭文件 在程序中添加這三個函數即可對printf進行重定向 二、封裝函數 另一種方法 封裝一個函數,定義一個數組

深度強化學習基礎 0:通用學習方法

過去自己學習深度強化學習的痛點: 只能看到各種術語、數學公式勉強看懂,沒有建立清晰且準確關聯 多變量交互關系浮于表面,有時候連環境、代理控制的變量都混淆 模型種類繁多,概念繁雜難整合、對比或復用,無框架分析所…

asm匯編源代碼之-字庫轉換程序

將標準的16x16點陣漢字庫(下載16x16漢字庫)轉換成適合VGA文本模式下顯示的點陣漢字庫 本程序需要調用file.asm中的子程序,所以連接時需要把file連接進來,如下 C:\> tlink chghzk file 調用參數描述如下 C:\> chghzk ; 無調用參數,轉換標準庫文件(SRC16.FNT)為適合VGA…

uniapp轉換markdown

效果 AI智能體 微信小程序 流式 1.安裝Node.js 參考:2024最新版Node.js下載安裝及環境配置教程(非常詳細)_node.js 安裝-CSDN博客 2.需要克隆項目到本地或直接到項目地址下載壓縮包。 參考:uniapp中解析markdown支持網頁和小程序_uniapp ma…

用java代碼如何存取數據庫的blob字段

一.業務 在業務中我們被要求將文件或圖片等轉成 byte[] 或 InputStream存到數據庫的Blob類型的字段中. 二.Blob類型介紹 在 MySQL 中,Blob 數據類型用于存儲二進制數據。MySQL 提供了四種不同的 Blob 類型: TINYBLOB: 最大存儲長度為 255 個字節。BL…

qemu(2) -- 定制開發板

1. 前言 qemu支持自定義開發板,本文就記錄一下折騰的過程。基于qemu-10.0.0-rc3添加x210vb3s開發板。 2. 添加板卡文件 網上參考了一些文章,有些文章使用的版本和我的不一樣,折騰起來費了點時間,最后發現還是直接參考qemu中已有…

Python在糖尿病分類問題上尋找具有最佳 ROC AUC 分數和 PR AUC 分數(決策樹、邏輯回歸、KNN、SVM)

Python在糖尿病分類問題上尋找具有最佳 ROC AUC 分數和 PR AUC 分數(決策樹、邏輯回歸、KNN、SVM) 問題模板解題思路1. 導入必要的庫2. 加載數據3. 劃分訓練集和測試集4. 數據預處理5. 定義算法及其參數6. 存儲算法和對應指標7. 訓練模型并計算指標8. 找…

CPU(中央處理器)

一、CPU的定義與核心作用 CPU 是計算機的核心部件,負責 解釋并執行指令、協調各硬件資源 以及 完成數據處理,其性能直接影響計算機的整體效率。 核心功能: 從內存中讀取指令并譯碼。執行算術邏輯運算。控制數據在寄存器、內存和I/O設備間的…

上層 Makefile 控制下層 Makefile 的方法

在復雜的項目中,通常會將項目劃分為多個模塊或子項目,每個模塊都有自己的 Makefile。上層 Makefile 的作用是協調和控制這些下層 Makefile 的構建過程。下面是幾種常見的示例,實現上層 Makefile 對下層 Makefile 的控制。 直接調用&#xff1…

prompts提示詞經典模板

prompts.py 中的提示詞模板詳解 文件中定義了兩個核心提示詞模板:REASON_PROMPT 和 RELEVANT_EXTRACTION_PROMPT。這兩個模板在 DeepResearcher 的推理過程中扮演著關鍵角色。下面我將詳細解析這兩個模板的結構和功能。 REASON_PROMPT 詳解 REASON_PROMPT 是用于指…