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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;分阶段适…