爱做的小说网站吗,wordpress海报生成器,什么叫国际互联网,建筑工程行业网站建设方案文章目录scikit-learn 包核心功能模块案例其他用法**常用功能详解****(1) 分类任务示例#xff08;SVM#xff09;****(2) 回归任务示例#xff08;线性回归#xff09;****(3) 聚类任务示例#xff08;K-Means#xff09;****(4) 特征工程#xff08;PCA降维#xff0…
文章目录scikit-learn 包核心功能模块案例其他用法**常用功能详解****(1) 分类任务示例SVM****(2) 回归任务示例线性回归****(3) 聚类任务示例K-Means****(4) 特征工程PCA降维****高级技巧****(1) 交叉验证与超参数调优****(2) 流水线Pipeline****(3) 自定义评估指标**方法介绍scikit-learn 包
scikit-learn (sklearn) 是 Python 中最流行的机器学习库之一提供了简单高效的工具集用于数据挖掘和数据分析。在反洗钱项目中它主要用于构建风险识别模型和可疑交易检测系统。以下是其核心特点和应用
核心功能模块
数据预处理(reprocessing) 特征缩放 StandardScaler 、 MinMaxScaler 缺失值处理 SimpleImputer 类别变量编码 OneHotEncoder 、 LabelEncoder 在反洗钱场景中用于标准化交易金额、客户特征等数据 监督学习算法 分类算法逻辑回归、随机森林、SVM等用于识别可疑交易回归算法预测交易风险评分聚类算法发现异常交易模式 模型评估与优化 交叉验证 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_size0.2,random_state42)
# test_size0.2 20% 为测试数据 80% 为训练数据
# random_state42 随机种子# 训练随机森林模型
model RandomForestClassifier(n_estimators100, random_state42)
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_size0.3,random_state42,stratifyy)# 使用 stratify保持类别分布一致当设置 stratifyy 时函数会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_estimators100, # 树的数量max_depth8, # 树深度防止过拟合class_weightbalanced, # 处理不平衡数据random_state42)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交易{i1}: 风险概率{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(kernelrbf, C1.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_clusters3, random_state42)
kmeans.fit(X_scaled)
print(聚类标签:, kmeans.labels_)(4) 特征工程PCA降维
from sklearn.decomposition import PCApca PCA(n_components2)
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, cv5)
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 LogisticRegressionLogisticRegression
1. 逻辑回归模型用于二分类问题正常交易与可疑交易。与随机森林等模型不同逻辑回归模型的解释性更强可用于特征工程和模型解释。
2. 概率预测 通过 predict_proba 方法输出交易为可疑的概率值
3. 特征重要性分析 通过 coef_ 属性查看各特征对模型决策的影响程度