【金融风控】特征评估与筛选详解

内容介绍

  • 掌握单特征分析的衡量指标

  • 知道 IV,PSI等指标含义

  • 知道多特征筛选的常用方法

  • 掌握Boruta,VIF,RFE,L1等特征筛选的使用方法

【理解】单特征分析

什么是好特征

从几个角度衡量:覆盖度,区分度,相关性,稳定性

覆盖度
  • 采集类,授权类,第三方数据在使用前都会分析覆盖度

    • 采集类 :如APP list (Android 手机 90%)

    • 授权类:如爬虫数据(20% 30%覆盖度)GPS (有些产品要求必须授权)

  • 一般会在两个层面上计算覆盖度(覆盖度 = 有数据的用户数/全体用户数)

    • 全体存量客户

    • 全体有信贷标签客户

  • 覆盖度可以衍生两个指标:缺失率,零值率

    • 缺失率:一般就是指在全体有标签用户上的覆盖度

    • 零值率:很多信贷类数据在数据缺失时会补零,所以需要统计零值率

  • 业务越来越成熟,覆盖度可能会越来愈好,可以通过运营策略提升覆盖度

总结:覆盖度 = 非空的样本数/总的样本数。

区分度

区分度是评估一个特征对好坏用户的区分性能的指标。

  • 可以把单特征当做模型,使用AUC, KS来评估特征区分度

  • 在信贷领域,常用Information Value (IV)来评估单特征的区分度

    • Information Value刻画了一个特征对好坏用户分布的区分程度

      • IV值越大,区分程度越大

      • IV值越小,区分程度越小

      • IV值最后ln的部分跟WOE是一样的

      • IV计算举例(数据为了方便计算填充,不代表实际业务)

      婚配goodbadp_goodp_badp_good-p_badln(p_g/p_bad)IV
      未婚403050%37.5%0.1250.28770.036
      已婚304037.5%50%-0.125-0.28770.036
      其他101012.5%12.5%000
      总计8080100%100%--0.072
      • IV<0.02 区分度小 建模时不用 (xgboost,lightGMB 对IV值要求不高) IV [0.02,0.5] 区分度大 可以放到模型里 IV > 0.5 单独取出作为一条规则使用,不参与模型训练

      • 模型中尽可能使用区分度相对较弱的特征,将多个弱特征组合,得到评分卡模型

      • 连续变量的IV值计算,先离散化再求IV,跟分箱结果关联很大(一般分3-5箱)

相关性

对线性回归模型,有一条基本假设是自变量x1,x2,…,xp之间不存在严格的线性关系

  • 先计算特征列之间相关性,把相关性高的列去掉

  • 计算特征列和标签列之间相关性,把相关性低的列去掉

  • 需要对相关系数较大的特征进行筛选,只保留其中对标签区分贡献度最大的特征,即保留IV较大的

  • 皮尔逊相关系数,斯皮尔曼相关系数,肯德尔相关系数

  • 如何选择:

    • 考察两个变量的相关关系,首先得清楚两个变量都是什么类型的

      • 连续型数值变量,无序分类变量、有序分类变量

    • 连续型数值变量,如果数据具有正态性,此时首选Pearson相关系数,如果数据不服从正态分布,此时可选择Spearman和Kendall系数

    • 两个有序分类变量相关关系,可以使用Spearman相关系数

    • 一个分类变量和一个连续数值变量,可以使用kendall相关系数

    • 总结:就适用性来说,kendall > spearman > pearson

  • 如何计算

import pandas as pd
df = pd.DataFrame({'A':[5,91,3],'B':[90,15,66],'C':[93,27,3]})
df.corr() # 皮尔逊
df.corr('spearman')#斯皮尔曼
df.corr('kendall')#肯德尔
  • 可以使用toad库来过滤大量的特征,高缺失率、低iv和高度相关的特征一次性过滤掉

    import toad
    data = pd.read_csv('../data/germancredit.csv')
    data.replace({'good':0,'bad':1},inplace=True)
    data.shape

    显示结果:

    (1000, 21)
    #缺失率大于0.5,IV值小于0.05,相关性大于0.7来进行特征筛选
    selected_data, drop_list= toad.selection.select(data,target = 'creditability', empty = 0.5, iv = 0.05, corr = 0.7, return_drop=True)
    print('保留特征:',selected_data.shape[1],'缺失删除:',len(drop_list['empty']),'低iv删除:',len(drop_list['iv']),'高相关删除:',len(drop_list['corr']))

    显示结果:

    保留特征: 12 缺失删除: 0 低iv删除: 9 高相关删除: 0
稳定性

特征稳定性主要通过计算不同时间段内同一类用户特征的分布的差异来评估

  • 常用的特征稳定性的度量有Population Stability Index (群体稳定性指标,PSI)

  • 当两个时间段的特征分布差异大,则PSI大,模型越不稳定

  • 当两个时间段的特征分布差异小,则PSI小,模型越稳定

  • IV是评估好坏用户分布差异的度量

  • PSI是评估两个时间段特征分布差异的度量

  • 都是评估分布差异的度量,并且公式其实一模一样,只是符号换了而已

总结:

#1.什么是好特征
覆盖度高(缺失率低,零值率低)
区分度高(IV高,单特征AUC 0.6以上)
稳定性强(PSI比较小)
相关性(特征之间彼此相关性不要太大)#2.怎么获得好特征
可以使用toad库来做单特征筛选,从IV,缺失率,相关性三个维度,一次性筛选出复合条件的好特征来

【理解】多特征筛选

  • 当我们构建了大量特征时,接下来的调整就是筛选出合适的特征进行模型训练

  • 过多的特征会导致模型训练变慢,学习所需样本增多,计算特征和存储特征成本变高

  • 常用的特征筛选方法

    • 星座特征

    • Boruta

    • 方差膨胀系数

    • 递归特征消除

    • L1惩罚项

星座特征

  • 星座是大家公认没用的特征,区分度低于星座的特征可以认为是无用特征

    • 把所有特征加上星座特征一起做模型训练

    • 拿到特征的重要度排序

    • 多次训练的重要度排序都低于星座的特征可以剔除

Boruta

  • Boruta算法是一种特征选择方法,使用特征的重要性来选取特征

    • 网址:https://github.com/scikit-learn-contrib/boruta_py

    • 安装:pip install Boruta -i https://pypi.tuna.tsinghua.edu.cn/simple/

  • 原理

    • 创建阴影特征 (shadow feature) : 对每个真实特征R,随机打乱顺序,得到阴影特征矩阵S,拼接到真实特征后面,构成新的特征矩阵N = [R, S]

    • 用新的特征矩阵N作为输入,训练模型,能输出feature_importances_的模型,如RandomForest, lightgbm,xgboost都可以,得到真实特征和阴影特征的feature importances,

    • 取阴影特征feature importance的最大值S_max,真实特征中feature importance小于S_max的,被认为是不重要的特征

    • 删除不重要的特征,重复上述过程,直到满足条件

    • 案例

    import numpy as np
    import pandas as pd 
    import joblib
    from sklearn.ensemble import RandomForestClassifier
    from boruta import BorutaPy
    #加载数据
    pd_data = joblib.load('../data/train_woe.pkl')
    pd_data

    显示结果:

    SK_ID_CURRTARGETAMT_GOODS_PRICEREGION_POPULATION_RELATIVEDAYS_BIRTHDAYS_EMPLOYEDDAYS_REGISTRATIONDAYS_ID_PUBLISHREGION_RATING_CLIENT_W_CITYREG_CITY_NOT_LIVE_CITY...p_NAME_SELLER_INDUSTRY_Connectivityp_NAME_YIELD_GROUP_XNAp_NAME_YIELD_GROUP_highp_NAME_YIELD_GROUP_low_actionp_NAME_YIELD_GROUP_low_normalp_PRODUCT_COMBINATION_Card Streetp_PRODUCT_COMBINATION_Cash Street: highp_PRODUCT_COMBINATION_Cash X-Sell: highp_PRODUCT_COMBINATION_Cash X-Sell: lowp_PRODUCT_COMBINATION_POS industry with interest
    12540624542900.6101180.0164060.3011900.092078-0.0998220.275679-0.020586-0.048048...0.0532570.3838100.0656500.0732900.164891-0.063697-0.028915-0.0336610.083527-0.065841
    81551095100-0.366495-0.410334-0.440745-0.6089580.1647070.193847-0.536494-0.048048...-0.065479-0.090837-0.1327870.073290-0.241145-0.063697-0.028915-0.0336610.083527-0.348529
    15405327854600.0386500.0164060.3011900.3716510.0751690.060654-0.020586-0.048048...-0.065479-0.090837-0.132787-0.316556-0.241145-0.063697-0.028915-0.0336610.083527-0.348529
    3009634486680-0.366495-0.1584460.301190-0.1716010.075169-0.057870-0.020586-0.048048...-0.065479-0.090837-0.132787-0.3165560.164891-0.063697-0.028915-0.0336610.083527-0.348529
    2695464123730-0.366495-0.410334-0.051704-0.171601-0.099822-0.297834-0.536494-0.048048...0.053257-0.0908370.110022-0.1521160.164891-0.063697-0.028915-0.033661-0.2393870.084509
    ..................................................................
    2989944463760-0.0502330.016406-0.440745-0.451249-0.377708-0.297834-0.020586-0.048048...0.053257-0.0408150.1100220.073290-0.241145-0.063697-0.028915-0.0336610.0835270.084509
    2694294122420-0.0502330.016406-0.4407450.2533810.0751690.060654-0.020586-0.048048...-0.065479-0.090837-0.1327870.0732900.164891-0.063697-0.028915-0.0336610.083527-0.348529
    1610002000.2688590.2682750.3011900.253381-0.099822-0.057870-0.0205860.459100...-0.065479-0.0908370.1100220.0732900.164891-0.063697-0.028915-0.0336610.0835270.084509
    9716921280400.0386500.016406-0.440745-0.4512490.075169-0.057870-0.536494-0.048048...-0.065479-0.0908370.1100220.0732900.164891-0.063697-0.028915-0.0336610.0835270.084509
    905812051650-0.050233-0.0432740.3011900.0920780.0751690.060654-0.020586-0.048048...-0.065479-0.090837-0.1327870.0732900.164891-0.063697-0.028915-0.0336610.083527-0.348529

    215257 rows × 79 columns

    #处理数据,去掉id 和 目标值
    pd_x = pd_data.drop(['SK_ID_CURR', 'TARGET'], axis=1)
    x = pd_x.values   # 特征
    y = pd_data['TARGET'].values # 目标
    y = y.ravel() # 将多维数组降为一维

    注意事项:` NOTE BorutaPy accepts numpy arrays only, hence the .values attribute

  • 使用Boruta,选择features

# 先定义一个随机森林分类器
rf = RandomForestClassifier(n_jobs=-1, class_weight='balanced', max_depth=5)
'''
BorutaPy function
estimator : 所使用的分类器,
n_estimators : 分类器数量, 默认值 = 1000,auto是基于数据集自动判定
max_iter : 最大迭代次数, 默认值 = 100
'''
feat_selector = BorutaPy(rf, n_estimators='auto', random_state=1, max_iter=10)
feat_selector.fit(x, y)
  • 展示选择出来的feature

# feat_selector.support_ # 返回特征是否有用,false可以去掉
pd_ft_select = pd.DataFrame({'feature':pd_x.columns.to_list(), "selected": feat_selector.support_})
pd_ft_select#查看哪些列是可以去掉的
pd_ft_select[pd_ft_select['selected']==False]

显示结果:

featureselected
0AMT_GOODS_PRICETrue
1REGION_POPULATION_RELATIVETrue
2DAYS_BIRTHTrue
3DAYS_EMPLOYEDTrue
4DAYS_REGISTRATIONTrue
.........
72p_PRODUCT_COMBINATION_Card StreetTrue
73p_PRODUCT_COMBINATION_Cash Street: highTrue
74p_PRODUCT_COMBINATION_Cash X-Sell: highTrue
75p_PRODUCT_COMBINATION_Cash X-Sell: lowTrue
76p_PRODUCT_COMBINATION_POS industry with interestTrue

77 rows × 2 columns

featureselected
27b_CREDIT_DAY_OVERDUEFalse
33b_AMT_CREDIT_SUM_OVERDUEFalse
37b_CREDIT_TYPE_MicroloanFalse
38b_CREDIT_TYPE_MortgageFalse
42pos_cash_paid_late_12_cntFalse
55p_NAME_CASH_LOAN_PURPOSE_RepairsFalse
60p_CODE_REJECT_REASON_SCOFRFalse

方差膨胀系数(VIF)

  • 方差膨胀系数 Variance inflation factor (VIF)

    • 如果一个特征是其他一组特征的线性组合,则不会在模型中提供额外的信息,可以去掉

    • 评估共线性程度

      \rm{x_i=1+\sum_{k\ne{i}}\beta_{k}x_{k}}
    • VIF计算:

      \rm{VIF=\frac{1}{1-R^2}}
    • R^2^是线性回归中的决定系数,反映了回归方程解释因变量变化的百分比

    • 上面的式子中, R²代表了预测值和真实值拟合的拟合程度,既考虑了预测值与真实值的差异,同时也兼顾了真实值的离散程度

      • R²<0.5 → 弱拟合

      • 0.5 ≤ R² ≤ 0.8 → 中度拟合

      • R² > 0.8 强拟合

      上面的公式中y = 真实值, $\hat{y}$ = 模型预测值, $\bar{y}$ = 真实值的平均值

      注意:理论上 R² < 0 是可能的,但是只出现在模型特别差的情况,因此不予讨论

      当R²越大,拟合的越好,说明x_i这个特征能被其它特征线性表示,当VIF超过某个阈值的时候,可以考虑把这个x_i删除

    • VIF越大说明拟合越好,该特征和其他特征组合共线性越强,就越没有信息量,可以剔除

  • 案例:

    • 加载数据

    import numpy as np
    import pandas as pd 
    import joblib
    #statsmodels是统计学相关的库
    from statsmodels.stats.outliers_influence import variance_inflation_factor
    pd_data = joblib.load('../data/train_woe.pkl')
    #去掉ID和目标值
    pd_x = pd_data.drop(['SK_ID_CURR', 'TARGET'], axis=1)
    • 计算方差膨胀系数

    #定义计算函数
    def checkVIF_new(df):lst_col = df.columns#x = np.matrix(df)x = df.values#这里i传入的是索引,从第0个特征开始,顺序计算所有特征的方差膨胀系数VIF_list = [variance_inflation_factor(x,i) for i in range(x.shape[1])]VIF = pd.DataFrame({'feature':lst_col,"VIF":VIF_list})return VIF
    df_vif = checkVIF_new(pd_x)
    df_vif

显示结果:

featureVIF
0AMT_GOODS_PRICE1.164528
1REGION_POPULATION_RELATIVE1.835830
2DAYS_BIRTH3.278163
3DAYS_EMPLOYED1.658723
4DAYS_REGISTRATION1.177438
.........
73p_PRODUCT_COMBINATION_Cash Street: high2.384278
74p_PRODUCT_COMBINATION_Cash X-Sell: high1.926074
75p_PRODUCT_COMBINATION_Cash X-Sell: low2.102989
76p_PRODUCT_COMBINATION_POS industry with interest2.036221

77 rows × 2 columns

  • 选取方差膨胀系数 > 3的features

df_vif[df_vif['VIF'] > 3]

显示结果:

featureVIF
2DAYS_BIRTH3.278163
11YEARS_BEGINEXPLUATATION_AVG4.536902
12FLOORSMAX_MEDI5.418642
13TOTALAREA_MODE5.211742
16AMT_REQ_CREDIT_BUREAU_YEAR4.172515
18NAME_INCOME_TYPE_Pensioner3.416916
23EMERGENCYSTATE_MODE_No3.836772
27b_CREDIT_DAY_OVERDUEinf
33b_AMT_CREDIT_SUM_OVERDUEinf
35b_CREDIT_TYPE_Car loan3.127171
38b_CREDIT_TYPE_Mortgageinf
65p_NAME_PORTFOLIO_POS3.273039
68p_NAME_YIELD_GROUP_XNA4.237860

总结:VIF越大,说明拟合越好,该特征和其他特征组合共线性越强,建议剔除。

RFE递归特征消除 (Recursive Feature Elimination)

  • 使用排除法的方式训练模型,把模型性能下降最少的那个特征去掉,反复上述训练直到达到指定的特征个数、

    • sklearn.feature_selection.RFE

  • 案例

    • 使用RFE,选择features

    #如下的案例可以快速出结果
    from sklearn.svm import LinearSVC
    from sklearn.datasets import load_iris
    from sklearn.feature_selection import RFE
    X,y = load_iris(return_X_y=True)
    #分类模型,C是正则化参数,用于控制模型复杂度和泛化能力,默认是1.0
    lscv = LinearSVC(C=0.01)
    # n_features_to_select 要选几个特征,  step 一次删掉几个
    selector = RFE(lscv,n_features_to_select=2,step=1)
    selector.fit(X,y)
    # support_ 返回False的可以被删除, 返回True的留下
    selector.support_
    # 获取顺序 序号越大的是优先被删除的
    selector.ranking_

    显示结果:

    array([False,  True,  True, False])

基于L1的特征选择 (L1-based feature selection)

  • 使用L1范数作为惩罚项的线性模型(Linear models)会得到稀疏解:大部分特征对应的系数为0

  • 希望减少特征维度用于其它分类器时,可以通过 feature_selection.SelectFromModel 来选择不为0的系数

案例

from sklearn.svm import LinearSVC
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectFromModel
iris = load_iris()
X, y = iris.data, iris.target
X.shape

显示结果:

(150, 4)

#Prefer dual=False when n_samples > n_features.(当样本数量比特征数量多时,设置为False即可)
lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X, y)
model = SelectFromModel(lsvc, prefit=True)
X_new = model.transform(X)
X_new.shape

显示结果:

(150, 3)

总结:我们一般不会单独去实现L1特征选择,不过我们在选择线性模型时如果使用L1进行正则化,就相当于已经用L1来帮我们做特征选择了。

【理解】特征监控

内部特征监控

释义:对内部的数据特征进行监控。

  • 前端监控(授信之前):特征稳定性

    • 大多数情况下,随着业务越来越稳定,缺失率应该呈现逐渐降低的趋势

    • 如下表所示,Week3缺失率突然增加到28%,大概率是数据采集或传输过程出问题了

    • PSI,特征维度的PSI如果>0.1可以观察一段时间

特征名称Week 1Week 2Week 3...
缺失率1%2%28%
零值率20%23%18%
PSI-0.020.3
  • 后端监控(放款之后):特征区分度

    • AUC/KS 波动在10%以内

    • KS 如果是线上A卡 0.2是合格的水平

    • IV值的波动稍大可以容忍,和分箱相关,每周数据分布情况可能不同,对IV影响大一些

特征名称Week 1Week 2Week 3...
AUC0.640.660.62
KS22%23%20%
IV0.050.070.04
  • 分箱样本比例

特征名称Week 1Week 2Week 3...
分箱110%20%15%
分箱250%60%75%
分箱340%20%10%
  • 分箱风险区分:要重视每个特征的风险趋势单调性

    • 每一箱 的bad_rate有波动,容忍度相对高一些

    • 高度重视不同箱之间风险趋势发生变化,如分箱1,分箱2,在week2和week3 风险趋势发生了变化

    • 如果风险趋势单调性发生变化,要考虑特征是不是要进行迭代

特征名称Week 1Week 2Week 3...
分箱130%26%20%
分箱210%17%23%
分箱35%7%6%

外部特征评估

释义:对外部(外来的)数据特征进行评估。

  • 数据评估标准

    覆盖度、区分度、稳定性

  • 使用外部数据的时候需要注意

    避免未来信息:使用外部数据的时候,可能出现训练模型的时候效果好,上线之后效果差

    • 取最近一个时间周期的数据

    • 之前3~4个月或者更长时间的数据做验证,看效果是不是越来越差

  • 外部数据覆盖度如何计算

    • 交集用户数 / 内部用户数

    • 需要对内部所有用户调用外部数据?

      • 如果外部数据免费,那么全部调用,但付费的三方数据要在有必要的时候在调用

      • 在计算外部数据覆盖度前,首先应该明确什么客群适合这个第三方数据

      • 内部缺少数据且这个第三方数据能提升区分度,那这个第三方数据才有用

    • 覆盖度 = 交集用户数 / 内部目标客群

  • 避免内部数据泄露

    • 如果需要把数据交给外部公司,让对方匹配一定要将内部信息做Hash处理再给对方匹配

    • 匹配上的是共有的数据,匹配不上的外部无法得知其身份

  • 避免三方公司对结果美化

    • 内部自己调用接口测覆盖度直接调用即可

    • 如果是把样本交给外部公司让对方匹配,一定要加假样本

      • 这样他们只能匹配出结果,但无法得知真实的覆盖度

      • 只有内部公司能区分出真假样本,从而计算出真实覆盖度

      • 如果覆盖度高于真实样本比例,说明结果作假

  • 评分型外部数据

    区分度和稳定性的分析方法同单特征的分析一样

    区分度:AUC, KS, IV, 风险趋势

    稳定性: PSI

  • 内部特征训练的模型效果 vs 内部特征+外部特征训练的模型效果

    • AUC有 2~3个点的提升就很好了

  • 黑名单型外部数据

    • 使用混淆矩阵评估区分度

      外部命中外部未命中
      内部坏TPFN
      内部好FPTN
    • Precision: 外部命中的尽可能多的是内部的坏客户

    • Recall: 内部的坏客户尽可能多的命中外部名单

  • 外部数据是否具有可回溯性无法得知,所以尽可能取最近的样本去测

    早期接入数据后要密切关注线上真实的区分度表现

小结

  • 单特征分析

    • 覆盖度

    • 区分度

    • 相关性

    • 稳定性

  • 多特征筛选

    • 星座

    • Boruta

    • VIF

    • RFE

    • L1

    • 业务

  • 内部特征的监控

    • 前端稳定性

    • 后端区分度

  • 外部特征的评估

    • 评分型数据

    • 名单型数据

    • 保护隐私

    • 未来信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/470470.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

链游系统定制化开发:引领游戏产业的新时代

在数字革命的浪潮中&#xff0c;链游&#xff08;区块链游戏&#xff09;作为一种新兴游戏形式&#xff0c;正重新定义游戏产业的发展方向。链游将区块链技术与传统游戏结合&#xff0c;使游戏体验更加公平透明&#xff0c;并赋予玩家真正的资产所有权。这一领域不仅为玩家带来…

2024 年 8 个最佳 API 设计工具图文介绍

8 个最佳 API 设计工具推荐&#xff0c;包括 Apifox、Postman、Swagger、Insomnia、Stoplight、Hoppscotch、RapidAPI和Paw。 详细介绍&#xff1a;2024 年 8 个最佳 API 设计工具推荐

知识库管理系统:企业数字化转型的加速器

在数字化转型的大潮中&#xff0c;知识库管理系统&#xff08;KBMS&#xff09;已成为企业提升效率和创新能力的关键工具。本文将探讨知识库管理系统的定义、企业建立知识库的必要性&#xff0c;以及如何快速搭建企业知识库。 知识库管理系统是什么&#xff1f; 知识库管理系统…

24/11/12 算法笔记<强化学习> Policy Gradient策略梯度

gradient的核心就是每次更新前要重新收集&#xff0c;每个阶段的actor是不一样的. 策略梯度算法的核心思想&#xff1a; 策略表示&#xff1a;首先&#xff0c;策略梯度方法需要一个策略&#xff0c;该策略能够根据当前的状态选择一个动作。这个策略通常由一个参数化的函数表示…

物理设备命名规则(Linux网络服务器 15)

Linux系统中的一切都是文件&#xff0c;硬件设备也不例外。既然都是文件&#xff0c;就必须有文件名称。系统内核中udev设备管理器会自动把硬件名称规范化起来&#xff0c;目的是让用户通过设备文件的名字可以大致了解设备属性以及分区信息。这对于陌生的设备来说特别方便。另外…

SciPy:Python 科学计算工具包的全面教程

SciPy&#xff1a;Python 科学计算工具包的全面教程 引言 在数据科学和科学计算的领域&#xff0c;Python 已经成为一种流行的编程语言。作为 Python 的核心库之一&#xff0c;SciPy 提供了高效的数值计算功能&#xff0c;是科学计算、工程和数学应用中不可或缺的工具。本文将…

SAP_MM_SD_PP_FICO_视频课程几乎免费送

朋友们&#xff0c;都已经是2024年了&#xff0c;SAP中国区都已经被合并到樱花国的亚太区了&#xff0c;SAP上海研发中心也陆续撤离中*&#xff0c;竟然还有朋友花上万RMB学习SAP&#xff0c;钱花了可以在挣&#xff0c;主要是那个视频课程一个模块下来就得上百个小时&#xff…

如何在Puppeteer中实现表单自动填写与提交:问卷调查

一、介绍 在现代市场研究中&#xff0c;问卷调查是一种重要的工具。企业通过在线问卷调查了解消费者对产品或服务的需求、偏好和满意度&#xff0c;从而为产品开发、市场营销和服务优化提供指导。然而&#xff0c;对于爬虫技术专家来说&#xff0c;批量自动化地填写和提交问卷…

深度学习——权重初始化、评估指标、梯度消失和梯度爆炸

文章目录 &#x1f33a;深度学习面试八股汇总&#x1f33a;权重初始化零初始化 (Zero Initialization)随机初始化 (Random Initialization)Xavier 初始化&#xff08;Glorot 初始化&#xff09;He 初始化正交初始化&#xff08;Orthogonal Initialization&#xff09;预训练模型…

实验一:自建Docker注册中心

基于容器安装运行Registry Docker Registry主要负责镜像仓库的管理 创建并启动一个运行Docker Registry: docker run -d -p 5000:5000 --restartalways --name myregistry -v /opt/data/registry:/var/lib/registry registry -v&#xff1a;将主机的本地/opt/data/registry目…

同三维T610UDP-4K60 4K60 DP或HDMI或手机信号采集卡

1路DP/HDMI/TYPE-C&#xff08;手机/平板等&#xff09;视频信号输入1路MIC1路LINE OUT,带1路HDMI环出&#xff0c;USB免驱&#xff0c;分辨率4K60&#xff0c;可采集3路信号中其中1路&#xff0c;按钮切换&#xff0c;可采集带TYPE-C接口的各品牌手机/平板/笔记本电脑等 同三维…

ReactPress技术揭秘

ReactPress Github项目地址&#xff1a;https://github.com/fecommunity/reactpress 欢迎Star。 一、引言 ReactPress是一个基于React构建的开源发布平台&#xff0c;它不仅可以帮助用户在支持React和MySQL数据库的服务器上快速搭建自己的博客或网站&#xff0c;还能作为一个…

Java 网络编程(一)—— UDP数据报套接字编程

概念 在网络编程中主要的对象有两个&#xff1a;客户端和服务器。客户端是提供请求的&#xff0c;归用户使用&#xff0c;发送的请求会被服务器接收&#xff0c;服务器根据请求做出响应&#xff0c;然后再将响应的数据包返回给客户端。 作为程序员&#xff0c;我们主要关心应…

【MySQL】数据库表连接简明解释

未经许可,不得转载。 文章目录 表连接表连接的类型内连接与外连接结合 WHERE 条件交叉连接(cross join)表连接 在关系型数据库中,建模是数据组织的核心难点。数据库建模需要将数据关系理清,构建出适合存储和查询的结构。 所谓“模型”包括实体(entity) 和关系(relati…

SpringBoot(八)使用AES库对字符串进行加密解密

博客的文章详情页面传递参数是使用AES加密过得&#xff0c;如下图所示&#xff1a; 这个AES加密是通用的加密方式&#xff0c;使用同一套算法&#xff0c;前端和后端都可以对加密之后的字符串进行加密解密操作。 目前线上正在使用的是前端javascript进行加密操作&#xff0c;将…

拦截器实现http请求访问本地图片

本文来记录下拦截器实现http请求访问本地图片 文章目录 概述代码实现本文小结 概述 如下图&#xff0c;本机(服务器)存储的图片想要在浏览器上通过Url地址访问&#xff1a; 浏览器直接访问 代码实现 烂机器实现文件真实地址和物理地址之间的映射 Slf4j Configuration public cl…

gpu-V100显卡相关知识

一、定义 RuntimeError: FlashAttention only supports Ampere GPUs or newer.torch attention注意力接口学习V100 架构是什么&#xff1f; 二、实现 RuntimeError: FlashAttention only supports Ampere GPUs or newer. 报错原因分析&#xff1a; GPU机器配置低&#xff0c;…

C++初阶——list

一、什么是list list是一个可以在序列的任意位置进行插入和删除的容器&#xff0c;并且可以进行双向迭代。list的底层是一个双向链表&#xff0c;双向链表可以将它们包含的每个元素存储在不同且不相关的存储位置。通过将每个元素与前一个元素的链接和后一个元素的链接关联起来&…

《DiffusionDet: Diffusion Model for Object Detection》ICCV2023

摘要 本文提出了一种新的框架DiffusionDet&#xff0c;它将目标检测任务表述为从带噪声的边界框到目标边界框的去噪扩散过程&#xff08;如图一所示&#xff09;。在训练阶段&#xff0c;目标边界框逐渐扩散到随机分布&#xff0c;模型学习逆转这一加噪过程。在推理阶段&#…

词嵌入方法(Word Embedding)

词嵌入方法&#xff08;Word Embedding&#xff09; Word Embedding是NLP中的一种技术&#xff0c;通过将单词映射到一个空间向量来表示每个单词 ✨️常见的词嵌入方法&#xff1a; &#x1f31f;Word2Vec&#xff1a;由谷歌提出的方法&#xff0c;分为CBOW&#xff08;conti…