
使用這些基本 REST API 最佳實踐構建出色的 API
比如說,分類模型,主要看準確率、精度、召回率、F1 分數,簡單來說就是預測數據點屬于哪個類別,與實際類別是否一致。比如預測郵件是不是垃圾郵件,腫瘤是不是良性的,或者客戶會不會買咱們的產品。
再比如說,回歸模型就是要評估模型預測的數值(比如預測股票第二天的價格是10塊),與實際價格數值差異大不大。
也就是要看模型分類準不準。具體來說,有這些常用的指標:
這里有個簡單的例子,用 sklearn 庫計算上面提到的指標:
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix, roc_auc_score, roc_curve
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
# 加載數據集
data = load_iris()
X, y = data.data, data.target
# 為了簡單起見,我們只取兩個類別的數據
X_binary = X[y != 2]
y_binary = y[y != 2]
# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X_binary, y_binary, test_size=0.3, random_state=42)
# 初始化模型
model = LogisticRegression()
# 訓練模型
model.fit(X_train, y_train)
# 進行預測
y_pred = model.predict(X_test)
# 計算各項指標
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)
conf_mat = confusion_matrix(y_test, y_pred)
# 計算AUC
auc = roc_auc_score(y_test, y_pred_prob)
print("AUC: ", auc)
回歸,簡單說就是基于已知的東西,來猜未知的數。比如你想知道一套房子的價格,就可以根據房子的面積、地理位置等特征來猜。回歸模型就是這樣幫你預測的。
但模型預測得準不準呢?這就需要用回歸指標來量化了。
公式:MSE = (1/n) * Σ(實際值 – 預測值)2
公式:RMSE = √MSE
公式:MAE = (1/n)* Σ|實際值 – 預測值|
除了上面這些,還有調整后的R平方,這個考慮了模型中特征的數量,避免因為特征多導致R平方虛高。
這些指標都可以幫你評估回歸模型的好壞,選擇最適合你問題的模型。
下面是一個用Python的sklearn
庫來計算這些指標的簡單例子:
Python
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
import numpy as np
# 假設這是你的數據和目標值(你可以用你自己的數據替換這些)
X = np.random.rand(100, 1) # 特征數據
y = X * 2 + np.random.randn(100, 1) * 0.1 # 目標數據
# 把數據分成訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 創建一個線性回歸模型并訓練它
model = LinearRegression()
model.fit(X_train, y_train)
# 使用模型進行預測
y_pred = model.predict(X_test)
# 計算指標
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
mae = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
# 樣本數量和特征數量
n = len(y_test)
p = X_test.shape[1]
# 計算調整后的R平方
adjusted_r2 = 1 - (1 - r2) * (n - 1) / (n - p - 1)
# 輸出結果
print(f"MSE: {mse}")
print(f"RMSE: {rmse}")
print(f"MAE: {mae}")
print(f"R平方: {r2}")
print(f"調整后的R平方: {adjusted_r2}")
聚類嘛,就是一種沒有標簽的數據分組方法。比如,咱們可以根據客戶的購物習慣把他們分成不同的群體,或者根據文章的內容判斷它們是不是講同一件事。
下面是一個簡單的代碼示例,用 scikit-learn 來計算這些指標:
from sklearn.metrics import silhouette_score, davies_bouldin_score, calinski_harabasz_score
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
# 生成一些隨機數據
X, _ = make_blobs(n_samples=150, n_features=2, centers=3, cluster_std=0.5, shuffle=True, random_state=0)
# 用 KMeans 進行聚類
kmeans = KMeans(n_clusters=3, random_state=0)
y_kmeans = kmeans.fit_predict(X)
# 計算指標
silhouette = silhouette_score(X, y_kmeans)
davies_bouldin = davies_bouldin_score(X, y_kmeans)
calinski_harabasz = calinski_harabasz_score(X, y_kmeans)
print(f"Silhouette Score: {silhouette}")
print(f"Davies-Bouldin Index: {davies_bouldin}")
print(f"Calinski-Harabasz Index: {calinski_harabasz}")
降維,簡單來說,就是把高維度的數據變成低維度的,同時盡量保留原始數據的信息。比如,我們可以把一張彩色圖片變成灰度圖,雖然顏色信息丟失了,但大致的輪廓還在。
降維指標主要分兩類:重建和保存。重建指標看的是降維后的數據能不能還原成原始數據;保存指標看的是降維后的數據能不能保持原始數據的某些特性,比如點與點之間的距離。
一些常用的降維指標有:
下面是一個簡單的代碼示例,用 scikit-learn 來計算這些指標(以PCA為例):
from sklearn.decomposition import PCA
from sklearn.metrics import mean_squared_error
from sklearn.datasets import make_blobs
# 生成一些隨機數據
X, _ = make_blobs(n_samples=150, n_features=5, centers=3, cluster_std=0.5, shuffle=True, random_state=0)
# 用 PCA 進行降維
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# 計算重建誤差
X_reconstructed = pca.inverse_transform(X_pca)
reconstruction_error = mean_squared_error(X, X_reconstructed)
# 計算解釋方差
explained_variance = pca.explained_variance_ratio_.sum()
print(f"Reconstruction Error: {reconstruction_error}")
print(f"Explained Variance: {explained_variance