scikit-learn 包

文章目錄

  • scikit-learn 包
    • 核心功能模塊
    • 案例
    • 其他用法
      • **常用功能詳解**
        • **(1) 分類任務示例(SVM)**
        • **(2) 回歸任務示例(線性回歸)**
        • **(3) 聚類任務示例(K-Means)**
        • **(4) 特征工程(PCA降維)**
      • **高級技巧**
        • **(1) 交叉驗證與超參數調優**
        • **(2) 流水線(Pipeline)**
        • **(3) 自定義評估指標**
    • 方法介紹

scikit-learn 包

scikit-learn (sklearn) 是 Python 中最流行的機器學習庫之一,提供了簡單高效的工具集用于數據挖掘和數據分析。在反洗錢項目中,它主要用于構建風險識別模型和可疑交易檢測系統。以下是其核心特點和應用:

核心功能模塊

  1. 數據預處理(reprocessing)
    • 特征縮放( StandardScaler 、 MinMaxScaler )
    • 缺失值處理( SimpleImputer )
    • 類別變量編碼( OneHotEncoder 、 LabelEncoder )
    • 在反洗錢場景中用于標準化交易金額、客戶特征等數據
  2. 監督學習算法
    • 分類算法:邏輯回歸、隨機森林、SVM等,用于識別可疑交易
    • 回歸算法:預測交易風險評分
    • 聚類算法:發現異常交易模式
  3. 模型評估與優化
    • 交叉驗證( cross_val_score )
    • 網格搜索( GridSearchCV )調參
    • 混淆矩陣、ROC曲線等評估指標

優勢
- 易于使用 :統一的API接口,適合快速開發
- 高效集成 :可與NumPy、Pandas數據處理無縫銜接
- 豐富文檔 :完善的教程和案例,降低反洗錢模型開發門檻
- 社區活躍 :持續更新維護,支持最新算法
注意事項
- 需配合 pandas 進行數據清洗
- 大規模交易數據可能需要結合 scipy 優化
- 模型解釋性需額外使用 SHAP 或 LIME 工具增強,滿足監管要求

案例

以反洗錢業務為背景,使用 scikit-learn 開發風險識別模型。

from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_splitfrom sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, classification_report# 加載數據
iris = load_iris()
X, y = iris.data, iris.target  # 特征矩陣 (n_samples, n_features) 和標簽# 數據預處理
# 標準化特征
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)  # 將輸入特征矩陣 X 轉換為均值為0、標準差為1的標準化數據
'''標準化特征:標準化特征是指將特征矩陣中的每個特征進行標準化處理,使它們的均值為0、標準差為1。標準化特征的目的是消除特征之間的量綱差異,使不同特征對模型的影響相同。標準化特征的計算方法是:將特征值減去均值,再除以標準差。標準化特征的計算過程如下:1. 計算特征的均值:mean = sum(x) / n2. 計算特征的標準差:std = sqrt(sum((x - mean)^2) / n)3. 標準化特征:x_scaled = (x - mean) / std兩步操作合一 : fit_transform 等價于先調用 scaler.fit(X) 再調用 scaler.transform(X)- fit(X) :計算訓練數據的均值和標準差等統計參數- transform(X) :使用這些參數將數據進行標準化轉換
'''# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X_scaled,y,test_size=0.2,random_state=42)
# test_size=0.2  20% 為測試數據 80% 為訓練數據
# random_state=42 隨機種子# 訓練隨機森林模型
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)  # 訓練y_pred = model.predict(X_test)
print("準確率:", accuracy_score(y_test, y_pred))
print("詳細報告:\n", classification_report(y_test, y_pred))

Demo 進階

# -*- coding: utf-8 -*-
"""
反洗錢交易檢測Demo
功能:使用隨機森林模型識別可疑交易
數據特征:交易金額、頻率、地區風險等級等
"""
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_auc_score, classification_report# 1. 準備反洗錢樣本數據(實際項目中從數據庫讀取)
def prepare_aml_data():"""生成模擬反洗錢交易數據"""# 正常交易(90%)和可疑交易(10%)np.random.seed(42)n_samples = 10000# 特征:交易金額、頻率、地區風險等級、賬戶年齡(天)X = pd.DataFrame({'amount': np.random.normal(5000, 3000, n_samples),'transaction_count': np.random.randint(1, 20, n_samples),'region_risk': np.random.randint(1, 5, n_samples),'account_age': np.random.randint(30, 365, n_samples)})# 標簽:1=可疑交易,0=正常交易y = np.where((X['amount'] > 10000) & (X['region_risk'] > 3) |(X['transaction_count'] > 15) & (X['account_age'] < 90),1, 0)return X, y# 2. 數據預處理與模型訓練
def train_aml_model():"""訓練反洗錢交易檢測模型"""# 獲取數據X, y = prepare_aml_data()# 拆分訓練集和測試集X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3,random_state=42,stratify=y)# 使用 stratify(保持類別分布一致)'''當設置 stratify=y 時,函數會:1. 分析 y 中各類別的比例2. 在拆分過程中,按照相同比例從每個類別中抽取樣本到訓練集和測試集3. 最終確保訓練集和測試集的類別分布與原始數據集高度一致反洗錢項目中的重要性1. 解決數據不平衡問題 :反洗錢數據通常存在嚴重的類別不平衡(正常交易占99%以上,可疑交易不足1%)2. 確保模型泛化能力 :如果不使用 stratify ,隨機拆分可能導致測試集中幾乎沒有可疑交易樣本,無法準確評估模型性能3. 符合監管要求 :保證模型在稀有但關鍵的可疑交易類別上有足夠的學習樣本,避免模型對這類交易的漏檢'''# 特征標準化(修復原代碼中的拼寫錯誤和語法問題)scaler = StandardScaler()  # 修正:scalar -> scaler# 對訓練集進行擬合和轉換X_train_scaled = scaler.fit_transform(X_train)  # 修正:添加括號和參數# 對測試集進行轉換X_test_scaled = scaler.transform(X_test)'''兩者區別1. fit_transform :用于訓練數據,計算并應用標準化參數(均值和標準差),并返回標準化后的訓練數據2. transform :用于測試數據,使用之前計算的標準化參數(均值和標準差),并返回標準化后的測試數據作用:1.避免數據泄露: 確保測試集的數據不會影響模型訓練過程中的參數估計2.保持一致性 :訓練集和測試集使用相同的轉換標準,確保模型評估的公平性3.模擬真實場景 :在實際反洗錢應用中,模型部署后只能使用訓練時確定的參數來處理新交易數據這種處理方式確保了模型評估的客觀性,也是機器學習流程中的最佳實踐。'''# 訓練隨機森林模型(反洗錢項目常用算法)model = RandomForestClassifier(n_estimators=100,  # 樹的數量max_depth=8,  # 樹深度,防止過擬合class_weight='balanced',  # 處理不平衡數據random_state=42)model.fit(X_train_scaled, y_train)# 模型評估y_pred_proba = model.predict_proba(X_test_scaled)[:, 1]y_pred = model.predict(X_test_scaled)print(f"模型AUC值: {roc_auc_score(y_test, y_pred_proba):.4f}")print("分類報告:\n", classification_report(y_test, y_pred))return model, scaler# 3. 預測新交易風險
def predict_risk(model, scaler, new_transaction):"""預測新交易的風險等級:param model: 訓練好的模型:param scaler: 特征縮放器:param new_transaction: 新交易數據(DataFrame):return: 風險概率和預測標簽"""transaction_scaled = scaler.transform(new_transaction)risk_prob = model.predict_proba(transaction_scaled)[0, 1]risk_label = 1 if risk_prob > 0.7 else 0  # 風險閾值設為0.7return risk_prob, risk_label# 執行Demo
if __name__ == "__main__":# 訓練模型aml_model, aml_scaler = train_aml_model()# 模擬新交易檢測new_trans = pd.DataFrame({'amount': [15000, 3000],'transaction_count': [18, 5],'region_risk': [4, 2],'account_age': [60, 200]})for i, trans in new_trans.iterrows():prob, label = predict_risk(aml_model, aml_scaler, trans.to_frame().T)print(f"交易{i+1}: 風險概率={prob:.4f}, 風險標簽={label} (1=可疑, 0=正常)")

模型保存

import joblib# 保存模型
joblib.dump(aml_model, 'aml_model.pkl')# 保存特征縮放器
joblib.dump(aml_scaler, 'aml_scaler.pkl')
# 加載模型
aml_model = joblib.load('aml_model.pkl')

其他用法

常用功能詳解

(1) 分類任務示例(SVM)
from sklearn.svm import SVC
from sklearn.metrics import confusion_matrixsvm = SVC(kernel='rbf', C=1.0)
svm.fit(X_train, y_train)
print("SVM 準確率:", svm.score(X_test, y_test))
print("混淆矩陣:\n", confusion_matrix(y_test, svm.predict(X_test)))
(2) 回歸任務示例(線性回歸)
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_errorX, y = [[1], [2], [3]], [1, 2, 3]  # 簡單數據
model = LinearRegression()
model.fit(X, y)
print("斜率:", model.coef_, "截距:", model.intercept_)
print("MSE:", mean_squared_error(y, model.predict(X)))
(3) 聚類任務示例(K-Means)
from sklearn.cluster import KMeanskmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X_scaled)
print("聚類標簽:", kmeans.labels_)
(4) 特征工程(PCA降維)
from sklearn.decomposition import PCApca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
print("降維后方差比例:", pca.explained_variance_ratio_)

高級技巧

(1) 交叉驗證與超參數調優
from sklearn.model_selection import GridSearchCVparams = {'n_estimators': [50, 100, 200], 'max_depth': [None, 5, 10]}
grid = GridSearchCV(RandomForestClassifier(), params, cv=5)
grid.fit(X_train, y_train)
print("最佳參數:", grid.best_params_)
(2) 流水線(Pipeline)
from sklearn.pipeline import Pipelinepipe = Pipeline([('scaler', StandardScaler()),('classifier', RandomForestClassifier())
])
pipe.fit(X_train, y_train)
(3) 自定義評估指標
from sklearn.metrics import make_scorerdef custom_metric(y_true, y_pred):return sum(y_true == y_pred) / len(y_true)scorer = make_scorer(custom_metric)
print("自定義得分:", scorer(model, X_test, y_test))

方法介紹

from sklearn.metrics import classification_report, roc_auc_score, precision_recall_curve, roc_curve, auc, recall_score, f1_score, log_loss, accuracy_score,precision_score'''
1. classification_report
生成詳細的分類評估報告,包含每個類別的精確率、召回率、F1分數和支持度。在反洗錢項目中,用于全面展示模型對正常交易(類別0)和可疑交易(類別1)的識別效果。2. roc_auc_score
計算ROC曲線下的面積(AUC值),范圍在0-1之間。值越接近1,模型區分正常交易和可疑交易的能力越強。反洗錢場景中,AUC是評估模型整體性能的關鍵指標。3. precision_recall_curve
繪制精確率-召回率曲線,展示不同閾值下模型的精確率和召回率之間的權衡關系。在反洗錢項目中,幫助確定最優閾值,平衡漏報(低召回)和誤報(低精確)風險。4. roc_curve
繪制受試者工作特征曲線(ROC曲線),展示不同閾值下模型的真陽性率(召回率)和假陽性率之間的關系。用于評估模型在不同閾值下的表現。5. auc
計算任意曲線下的面積,常與 roc_curve 或 precision_recall_curve 結合使用,量化曲線所代表的模型性能。6. recall_score
計算召回率(真陽性率):實際可疑交易中被正確識別的比例。反洗錢項目中,高召回率至關重要,可減少漏報風險,符合監管要求。7. f1_score
計算F1分數:精確率和召回率的調和平均數。綜合評估模型性能,尤其適用于類別不平衡的反洗錢數據(正常交易遠多于可疑交易)。8. log_loss
計算對數損失(交叉熵損失):衡量模型概率預測與實際標簽的差異。值越小,模型預測越準確,適用于評估反洗錢模型的概率輸出質量。9. accuracy_score
計算準確率:正確預測的樣本數占總樣本數的比例。但在反洗錢等類別不平衡場景中,準確率可能會誤導(如99%正常交易的數據集,即使全部預測為正常也能達到99%準確率)。10. precision_score
計算精確率(陽性預測值):預測為可疑的交易中實際為可疑的比例。反洗錢項目中,高精確率可減少誤報,降低人工審核成本。
'''
from sklearn.linear_model import LogisticRegression
'''
LogisticRegression
1. 邏輯回歸模型,用于二分類問題(正常交易與可疑交易)。與隨機森林等模型不同,邏輯回歸模型的解釋性更強,可用于特征工程和模型解釋。
2. 概率預測 :通過 predict_proba 方法輸出交易為可疑的概率值
3. 特征重要性分析 :通過 coef_ 屬性查看各特征對模型決策的影響程度
'''

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

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

相關文章

Excel 將數據導入到SQLServer數據庫

一般系統上線前期都會導入期初數據&#xff0c;業務人員一般要求你提供一個Excel模板&#xff0c;業務人員根據要求整理數據。SQLServer管理工具是支持批量導入數據的&#xff0c;所以我們可以使用該工具導入期初。Excel格式 第一行為字段1、連接登入的數據庫并且選中你需要導入…

剪枝和N皇后在后端項目中的應用

剪枝算法&#xff08;Pruning Algorithm&#xff09; 生活比喻&#xff1a;就像修剪樹枝一樣&#xff0c;把那些明顯不會結果的枝條提前剪掉&#xff0c;節省養分。 在后端項目中的應用場景&#xff1a; 搜索優化&#xff1a;在商品搜索中&#xff0c;如果某個分類下沒有符合條…

cocos 2d游戲中多邊形碰撞器會觸發多次,怎么解決

子彈打到敵機 一發子彈擊中&#xff0c;碰撞回調多次執行 我碰撞組件原本是多邊形碰撞組件 PolygonCollider2D&#xff0c;我改成盒碰撞組件BoxCollider2D 就好了 用前端的節流方式。或者loading處理邏輯。我測試過了&#xff0c;是可以 本來就是多次啊,設計上貌似就是這樣的…

Kubernetes環境中GPU分配異常問題深度分析與解決方案

Kubernetes環境中GPU分配異常問題深度分析與解決方案 一、問題背景與核心矛盾 在基于Kubernetes的DeepStream應用部署中&#xff0c;GPU資源的獨占性分配是保障應用性能的關鍵。本文將圍繞一個典型的GPU分配異常問題展開分析&#xff1a;多個請求GPU的容器本應獨占各自的GPU&…

Django與模板

我叫補三補四&#xff0c;很高興見到大家&#xff0c;歡迎一起學習交流和進步今天來講一講視圖Django與模板文件工作流程模板引擎&#xff1a;主要參與模板渲染的系統。內容源&#xff1a;輸入的數據流。比較常見的有數據庫、XML文件和用戶請求這樣的網絡數據。模板&#xff1a…

日本上市IT企業|8月25日將在大連舉辦赴日it招聘會

株式會社GSD的核心戰略伙伴貝斯株式會社&#xff0c;將于2025年8月25日在大連香格里拉大酒店商務會議室隆重舉辦赴日技術人才專場招聘會。本次招聘會面向全國范圍內的優秀IT人才&#xff0c;旨在為貝斯株式會社東京本社長期發展招募優質的系統開發與管理人才。招聘計劃&#xf…

低功耗設計雙目協同畫面實現光學變焦內帶AI模型

低功耗設計延長續航&#xff0c;集成儲能模塊保障陰雨天氣下的鐵塔路線的安全一、智能感知與識別技術 多光譜融合監控結合可見光、紅外熱成像、激光補光等技術&#xff0c;實現全天候監測。例如&#xff0c;紅外熱成像可穿透雨霧監測山火隱患&#xff0c;激光補光技術則解決夜間…

datasophon下dolphinscheduler執行腳本出錯

執行hive腳本出錯&#xff1a; 錯誤消息&#xff1a; FAILED: RuntimeException Error loading hooks(hive.exec.post.hooks): java.lang.ClassNotFoundException: org.apache.atlas.hive.hook.HiveHookat java.net.URLClassLoader.findClass(URLClassLoader.java:387)at java.…

【Elasticsearch】安全地刪除快照倉庫、快照

《Elasticsearch 集群》系列&#xff0c;共包含以下文章&#xff1a; 1?? 冷熱集群架構2?? 合適的鍋炒合適的菜&#xff1a;性能與成本平衡原理公式解析3?? ILM&#xff08;Index Lifecycle Management&#xff09;策略詳解4?? Elasticsearch 跨機房部署5?? 快照與恢…

nodejs的npm

1. 什么是 npm&#xff1f; npm&#xff08;Node Package Manager&#xff09; 是 Node.js 的默認包管理工具&#xff0c;用于&#xff1a; 安裝和管理依賴&#xff08;第三方庫、框架等&#xff09;。運行項目腳本&#xff08;如啟動服務、測試、構建等&#xff09;。發布和共…

外網訪問內部私有局域網方案,解決運營商只分配內網IP不給公網IP問題

相信不少網友和我一樣&#xff0c;為了實現遠程控制、NAS訪問、組建私有云、攝像頭監控之類的需求&#xff0c;把光貓改成了橋接模式&#xff0c;并用自己的路由器撥號、進行端口了映射。本人之前一直用著沒啥問題&#xff0c;不過&#xff0c;最近突然出現了無法訪問的情況&am…

大模型——上下文工程 (Context Engineering) – 現代 AI 系統的架構基礎

上下文工程 (Context Engineering) – 現代 AI 系統的架構基礎 最近,AI大神 Andrej Karpathy 在YC的一個演講《Software in the era of AI 》帶火了一個新的概念 Context Engineering,上下文工程,LangChain也于7月2號在官網博客發表以《Context Engineering》為題目的文章(h…

PostgreSQL RelationBuildTupleDesc 分解

/** RelationBuildTupleDesc** Form the relations tuple descriptor from information in* the pg_attribute, pg_attrdef & pg_constraint system catalogs.*///從pg_attribute,pg_attrdef和pg_constraint 獲取字段信息以填充relation->rd_att static void //用到的…

在 Alpine Linux 中創建虛擬機時 Cgroup 掛在失敗的現象

現象&#xff1a;在 Alpine Linux 中部署 LXD或者incus 服務后&#xff0c;創建 容器或者虛擬機時提示 實例啟動失敗、退出代碼為1&#xff1a;查詢啟動日志后&#xff0c;發現是 cgroup 掛載失敗導致了 container 拉起失敗。原因分析&#xff1a;從啟動日志上看&#xff0c;是…

讓UV管理一切!!!

一、遇到的問題 自己在做AI開發的時候&#xff0c;先用的conda來管理虛擬環境&#xff0c;然后使用pip freeze > reqiurments來打包相關依賴。 優點&#xff0c;conda環境可以讓不同的項目有單獨的虛擬環境&#xff0c;不會干擾每個項目&#xff0c;還可以多個項目共享一個…

Jmeter使用 - 2

5 參數化 5.1 自定義變量 線程組 --> 配置元件 --> 用戶定義的變量 可以自定義變量&#xff0c;通過 ${變量名} 使用 5.2 隨機函數 隨機數函數 # 生產六位數的隨機數字 ${__Random(100000,999999,)} # 生成隨機時間: 時間格式yyyy-MM-dd,開始時間,結束時間,設置時區…

部署 Zabbix 企業級分布式監控

目錄 一、監控系統的功能概述 1、監控的定義 2、監控的五個層次 &#xff08;1&#xff09;基礎設施監控 &#xff08;2&#xff09;系統層監控 &#xff08;3&#xff09;應用層監控 &#xff08;4&#xff09;業務監控 &#xff08;5&#xff09;端用戶體驗監控 二、…

Silly Tavern 教程②:首次啟動與基礎設置

本文介紹 Silly Tavern 首次啟動后的基礎設置&#xff0c;包括語言切換與 AI 后端連接&#xff0c;重點推薦 無需付費即可使用的免費或低成本方案&#xff0c;涵蓋 Groq、AI Horde、Gemini 和 OpenRouter。 一、啟動 Silly Tavern 并訪問界面 完成安裝后&#xff0c;執行以下命…

C#解析JSON數據全攻略

還在為C#處理網絡API返回的復雜JSON數據頭疼嗎&#xff1f;據統計&#xff0c;90%的開發者都曾在JSON解析上栽過跟頭&#xff01; 本文將手把手教你用C#輕松玩轉JSON數據&#xff1a;- HttpClient獲取網絡JSON數據- System.Text.Json動態解析技巧- 強類型模型轉換實戰- 特殊字…

8-大語言模型—指令理解:基于 LoRA 的大語言模型指令微調框架

目錄 1、模型上下文窗口 1.1、增加上下文窗口的微調&#xff08;Fine-tuning for Longer Context&#xff09; 1.1.1、 核心目標 1.1.2、關鍵步驟 &#xff08;1&#xff09;數據準備&#xff1a;構建長文本訓練集 &#xff08;2&#xff09;微調策略&#xff1a;分階段適…