<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>cabbage</title>
        <link>https://paragraph.com/@cabbage</link>
        <description>undefined</description>
        <lastBuildDate>Wed, 22 Jul 2026 05:44:35 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[数据挖掘竞赛常用代码段]]></title>
            <link>https://paragraph.com/@cabbage/v4vwkuHLKkRGxhQHXtaw</link>
            <guid>v4vwkuHLKkRGxhQHXtaw</guid>
            <pubDate>Sat, 14 May 2022 05:56:15 GMT</pubDate>
            <description><![CDATA[常用库import gc import os import csv import time import math import datetime import collections import pandas as pd import numpy as np from tqdm import tqdm, tqdm_notebook, trange from sklearn import preprocessing import lightgbm as lgb import xgboost as xgb import catboost as cb from sklearn.model_selection import train_test_split from sklearn.model_selection import StratifiedKFold from sklearn.metrics import roc_curve, auc, roc_auc_score import matplotlib.pyplot as plt import seaborn as sns 降低...]]></description>
            <content:encoded><![CDATA[<h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">常用库</h2><pre data-type="codeBlock" text="import gc
import os
import csv
import time
import math
import datetime
import collections
import pandas as pd
import numpy as np
from tqdm import tqdm, tqdm_notebook, trange
from sklearn import preprocessing

import lightgbm as lgb
import xgboost as xgb
import catboost as cb
from sklearn.model_selection import train_test_split
from sklearn.model_selection import StratifiedKFold
from sklearn.metrics import roc_curve, auc, roc_auc_score
import matplotlib.pyplot as plt
import seaborn as sns
"><code><span class="hljs-keyword">import</span> gc
<span class="hljs-keyword">import</span> os
<span class="hljs-keyword">import</span> csv
<span class="hljs-keyword">import</span> time
<span class="hljs-keyword">import</span> math
<span class="hljs-keyword">import</span> datetime
<span class="hljs-keyword">import</span> collections
<span class="hljs-keyword">import</span> pandas <span class="hljs-keyword">as</span> pd
<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np
<span class="hljs-keyword">from</span> tqdm <span class="hljs-keyword">import</span> tqdm, tqdm_notebook, trange
<span class="hljs-keyword">from</span> sklearn <span class="hljs-keyword">import</span> preprocessing

<span class="hljs-keyword">import</span> lightgbm <span class="hljs-keyword">as</span> lgb
<span class="hljs-keyword">import</span> xgboost <span class="hljs-keyword">as</span> xgb
<span class="hljs-keyword">import</span> catboost <span class="hljs-keyword">as</span> cb
<span class="hljs-keyword">from</span> sklearn.<span class="hljs-property">model_selection</span> <span class="hljs-keyword">import</span> train_test_split
<span class="hljs-keyword">from</span> sklearn.<span class="hljs-property">model_selection</span> <span class="hljs-keyword">import</span> <span class="hljs-title class_">StratifiedKFold</span>
<span class="hljs-keyword">from</span> sklearn.<span class="hljs-property">metrics</span> <span class="hljs-keyword">import</span> roc_curve, auc, roc_auc_score
<span class="hljs-keyword">import</span> matplotlib.<span class="hljs-property">pyplot</span> <span class="hljs-keyword">as</span> plt
<span class="hljs-keyword">import</span> seaborn <span class="hljs-keyword">as</span> sns
</code></pre><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">降低内存</h2><pre data-type="codeBlock" text="def reduce_mem_usage(df):
    &quot;&quot;&quot; iterate through all the columns of a dataframe and modify the data type
        to reduce memory usage.        
    &quot;&quot;&quot;
    start_mem = df.memory_usage().sum() / 1024**2
    print(&apos;Memory usage of dataframe is {:.2f} MB&apos;.format(start_mem))
    
    for col in df.columns:
        col_type = df[col].dtype
        
        if col_type != object:
            c_min = df[col].min()
            c_max = df[col].max()
            if str(col_type)[:3] == &apos;int&apos;:
                if c_min &gt; np.iinfo(np.int8).min and c_max &lt; np.iinfo(np.int8).max:
                    df[col] = df[col].astype(np.int8)
                elif c_min &gt; np.iinfo(np.int16).min and c_max &lt; np.iinfo(np.int16).max:
                    df[col] = df[col].astype(np.int16)
                elif c_min &gt; np.iinfo(np.int32).min and c_max &lt; np.iinfo(np.int32).max:
                    df[col] = df[col].astype(np.int32)
                elif c_min &gt; np.iinfo(np.int64).min and c_max &lt; np.iinfo(np.int64).max:
                    df[col] = df[col].astype(np.int64)  
            else:
                if c_min &gt; np.finfo(np.float16).min and c_max &lt; np.finfo(np.float16).max:
                    df[col] = df[col].astype(np.float16)
                elif c_min &gt; np.finfo(np.float32).min and c_max &lt; np.finfo(np.float32).max:
                    df[col] = df[col].astype(np.float32)
                else:
                    df[col] = df[col].astype(np.float64)
        else:
            df[col] = df[col].astype(&apos;category&apos;)

    end_mem = df.memory_usage().sum() / 1024**2
    print(&apos;Memory usage after optimization is: {:.2f} MB&apos;.format(end_mem))
    print(&apos;Decreased by {:.1f}%&apos;.format(100 * (start_mem - end_mem) / start_mem))
    
    return df
"><code>def reduce_mem_usage(df):
    <span class="hljs-string">""</span><span class="hljs-string">" iterate through all the columns of a dataframe and modify the data type
        to reduce memory usage.        
    "</span><span class="hljs-string">""</span>
    start_mem <span class="hljs-operator">=</span> df.memory_usage().sum() <span class="hljs-operator">/</span> <span class="hljs-number">1024</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-number">2</span>
    print(<span class="hljs-string">'Memory usage of dataframe is {:.2f} MB'</span>.format(start_mem))
    
    <span class="hljs-keyword">for</span> col in df.columns:
        col_type <span class="hljs-operator">=</span> df[col].dtype
        
        <span class="hljs-keyword">if</span> col_type <span class="hljs-operator">!</span><span class="hljs-operator">=</span> object:
            c_min <span class="hljs-operator">=</span> df[col].<span class="hljs-built_in">min</span>()
            c_max <span class="hljs-operator">=</span> df[col].<span class="hljs-built_in">max</span>()
            <span class="hljs-keyword">if</span> str(col_type)[:<span class="hljs-number">3</span>] <span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">'int'</span>:
                <span class="hljs-keyword">if</span> c_min <span class="hljs-operator">></span> np.iinfo(np.int8).<span class="hljs-built_in">min</span> and c_max <span class="hljs-operator">&#x3C;</span> np.iinfo(np.int8).<span class="hljs-built_in">max</span>:
                    df[col] <span class="hljs-operator">=</span> df[col].astype(np.int8)
                elif c_min <span class="hljs-operator">></span> np.iinfo(np.int16).<span class="hljs-built_in">min</span> and c_max <span class="hljs-operator">&#x3C;</span> np.iinfo(np.int16).<span class="hljs-built_in">max</span>:
                    df[col] <span class="hljs-operator">=</span> df[col].astype(np.int16)
                elif c_min <span class="hljs-operator">></span> np.iinfo(np.int32).<span class="hljs-built_in">min</span> and c_max <span class="hljs-operator">&#x3C;</span> np.iinfo(np.int32).<span class="hljs-built_in">max</span>:
                    df[col] <span class="hljs-operator">=</span> df[col].astype(np.int32)
                elif c_min <span class="hljs-operator">></span> np.iinfo(np.int64).<span class="hljs-built_in">min</span> and c_max <span class="hljs-operator">&#x3C;</span> np.iinfo(np.int64).<span class="hljs-built_in">max</span>:
                    df[col] <span class="hljs-operator">=</span> df[col].astype(np.int64)  
            <span class="hljs-keyword">else</span>:
                <span class="hljs-keyword">if</span> c_min <span class="hljs-operator">></span> np.finfo(np.float16).<span class="hljs-built_in">min</span> and c_max <span class="hljs-operator">&#x3C;</span> np.finfo(np.float16).<span class="hljs-built_in">max</span>:
                    df[col] <span class="hljs-operator">=</span> df[col].astype(np.float16)
                elif c_min <span class="hljs-operator">></span> np.finfo(np.float32).<span class="hljs-built_in">min</span> and c_max <span class="hljs-operator">&#x3C;</span> np.finfo(np.float32).<span class="hljs-built_in">max</span>:
                    df[col] <span class="hljs-operator">=</span> df[col].astype(np.float32)
                <span class="hljs-keyword">else</span>:
                    df[col] <span class="hljs-operator">=</span> df[col].astype(np.float64)
        <span class="hljs-keyword">else</span>:
            df[col] <span class="hljs-operator">=</span> df[col].astype(<span class="hljs-string">'category'</span>)

    end_mem <span class="hljs-operator">=</span> df.memory_usage().sum() <span class="hljs-operator">/</span> <span class="hljs-number">1024</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-number">2</span>
    print(<span class="hljs-string">'Memory usage after optimization is: {:.2f} MB'</span>.format(end_mem))
    print(<span class="hljs-string">'Decreased by {:.1f}%'</span>.format(<span class="hljs-number">100</span> <span class="hljs-operator">*</span> (start_mem <span class="hljs-operator">-</span> end_mem) <span class="hljs-operator">/</span> start_mem))
    
    <span class="hljs-keyword">return</span> df
</code></pre><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">常用统计特征</h2><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">一阶</h3><pre data-type="codeBlock" text=" tmp_df = use_Mb_info_n.groupby(&quot;user_id&quot;).agg({
        &quot;x1&quot;: [&quot;sum&quot;,&quot;max&quot;,&quot;min&quot;,&quot;mean&quot;],
        &quot;x2&quot;: [&quot;count&quot;,&quot;nunique&quot;],
        &quot;x3&quot;:[&quot;nunique&quot;],
        &quot;x4&quot;:[&quot;sum&quot;]
    })
tmp_df.columns = [&apos;_&apos;.join(str(xx) for xx in x) for x in tmp_df.columns.ravel()]
tmp_df = tmp_df.reset_index()
feature_df = pd.merge(feature_df, tmp_df, how=&apos;left&apos;, on=&apos;user_id&apos;)
"><code> tmp_df <span class="hljs-operator">=</span> use_Mb_info_n.groupby(<span class="hljs-string">"user_id"</span>).agg({
        <span class="hljs-string">"x1"</span>: [<span class="hljs-string">"sum"</span>,<span class="hljs-string">"max"</span>,<span class="hljs-string">"min"</span>,<span class="hljs-string">"mean"</span>],
        <span class="hljs-string">"x2"</span>: [<span class="hljs-string">"count"</span>,<span class="hljs-string">"nunique"</span>],
        <span class="hljs-string">"x3"</span>:[<span class="hljs-string">"nunique"</span>],
        <span class="hljs-string">"x4"</span>:[<span class="hljs-string">"sum"</span>]
    })
tmp_df.columns <span class="hljs-operator">=</span> [<span class="hljs-string">'_'</span>.join(str(xx) <span class="hljs-keyword">for</span> xx in x) <span class="hljs-keyword">for</span> x in tmp_df.columns.ravel()]
tmp_df <span class="hljs-operator">=</span> tmp_df.reset_index()
feature_df <span class="hljs-operator">=</span> pd.merge(feature_df, tmp_df, how<span class="hljs-operator">=</span><span class="hljs-string">'left'</span>, on<span class="hljs-operator">=</span><span class="hljs-string">'user_id'</span>)
</code></pre><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">二阶</h3><pre data-type="codeBlock" text="tmp_df = train_data.groupby([&quot;user_id&quot;, &quot;date&quot;]).agg({
        &quot;x1&quot;: [&quot;sum&quot;, &quot;mean&quot;, &quot;max&quot;, &quot;skew&quot;, pd.DataFrame.kurt],
        &quot;x2&quot;: [&quot;nunique&quot;],
        &quot;x3&quot;: [&quot;sum&quot;],
        &quot;x4&quot;: [&quot;sum&quot;]
    })
tmp_df.columns = [&quot;_&quot;.join((str(xx) for xx in x)) for x in tmp_df.columns.ravel()]
tmp_df = tmp_df.unstack(level=-1)
tmp_df.columns = [&quot;_&quot;.join((str(xx) for xx in x)) for x in tmp_df.columns.ravel()]
tmp_df = tmp_df.reset_index()
feature_df = pd.merge(feature_df, tmp_df, how=&apos;left&apos;, on=&apos;uid&apos;)
"><code>tmp_df <span class="hljs-operator">=</span> train_data.groupby([<span class="hljs-string">"user_id"</span>, <span class="hljs-string">"date"</span>]).agg({
        <span class="hljs-string">"x1"</span>: [<span class="hljs-string">"sum"</span>, <span class="hljs-string">"mean"</span>, <span class="hljs-string">"max"</span>, <span class="hljs-string">"skew"</span>, pd.DataFrame.kurt],
        <span class="hljs-string">"x2"</span>: [<span class="hljs-string">"nunique"</span>],
        <span class="hljs-string">"x3"</span>: [<span class="hljs-string">"sum"</span>],
        <span class="hljs-string">"x4"</span>: [<span class="hljs-string">"sum"</span>]
    })
tmp_df.columns <span class="hljs-operator">=</span> [<span class="hljs-string">"_"</span>.join((str(xx) <span class="hljs-keyword">for</span> xx in x)) <span class="hljs-keyword">for</span> x in tmp_df.columns.ravel()]
tmp_df <span class="hljs-operator">=</span> tmp_df.unstack(level<span class="hljs-operator">=</span><span class="hljs-number">-1</span>)
tmp_df.columns <span class="hljs-operator">=</span> [<span class="hljs-string">"_"</span>.join((str(xx) <span class="hljs-keyword">for</span> xx in x)) <span class="hljs-keyword">for</span> x in tmp_df.columns.ravel()]
tmp_df <span class="hljs-operator">=</span> tmp_df.reset_index()
feature_df <span class="hljs-operator">=</span> pd.merge(feature_df, tmp_df, how<span class="hljs-operator">=</span><span class="hljs-string">'left'</span>, on<span class="hljs-operator">=</span><span class="hljs-string">'uid'</span>)
</code></pre><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">画图</h2><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">协方差</h3><pre data-type="codeBlock" text="def correlation_heatmap(df):
    _ , ax = plt.subplots(figsize =(50, 50))
    colormap = sns.diverging_palette(220, 10, as_cmap = True)
    
    _ = sns.heatmap(
        df.corr(), 
        cmap = colormap,
        square=True, 
        cbar_kws={&apos;shrink&apos;:.9 }, 
        ax=ax,
        annot=True, 
        linewidths=0.1,vmax=1.0, linecolor=&apos;white&apos;,
        annot_kws={&apos;fontsize&apos;:12 }
    )
    
    plt.title(&apos;Pearson Correlation of Features&apos;, y=1.05, size=15)

correlation_heatmap(your_df)
"><code>def correlation_heatmap(df):
    <span class="hljs-keyword">_</span> , ax <span class="hljs-operator">=</span> plt.subplots(figsize <span class="hljs-operator">=</span>(<span class="hljs-number">50</span>, <span class="hljs-number">50</span>))
    colormap <span class="hljs-operator">=</span> sns.diverging_palette(<span class="hljs-number">220</span>, <span class="hljs-number">10</span>, as_cmap <span class="hljs-operator">=</span> True)
    
    <span class="hljs-keyword">_</span> <span class="hljs-operator">=</span> sns.heatmap(
        df.corr(), 
        cmap <span class="hljs-operator">=</span> colormap,
        square<span class="hljs-operator">=</span>True, 
        cbar_kws<span class="hljs-operator">=</span>{<span class="hljs-string">'shrink'</span>:<span class="hljs-number">.9</span> }, 
        ax<span class="hljs-operator">=</span>ax,
        annot<span class="hljs-operator">=</span>True, 
        linewidths<span class="hljs-operator">=</span><span class="hljs-number">0</span><span class="hljs-number">.1</span>,vmax<span class="hljs-operator">=</span><span class="hljs-number">1.0</span>, linecolor<span class="hljs-operator">=</span><span class="hljs-string">'white'</span>,
        annot_kws<span class="hljs-operator">=</span>{<span class="hljs-string">'fontsize'</span>:<span class="hljs-number">12</span> }
    )
    
    plt.title(<span class="hljs-string">'Pearson Correlation of Features'</span>, y<span class="hljs-operator">=</span><span class="hljs-number">1.05</span>, size<span class="hljs-operator">=</span><span class="hljs-number">15</span>)

correlation_heatmap(your_df)
</code></pre><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">正常显示中文</h3><pre data-type="codeBlock" text="plt.rcParams[&apos;font.sans-serif&apos;]=[&apos;SimHei&apos;] #用来正常显示中文标签
plt.rcParams[&apos;axes.unicode_minus&apos;]=False #用来正常显示负号
"><code>plt.rcParams[<span class="hljs-string">'font.sans-serif'</span>]<span class="hljs-operator">=</span>[<span class="hljs-string">'SimHei'</span>] #用来正常显示中文标签
plt.rcParams[<span class="hljs-string">'axes.unicode_minus'</span>]<span class="hljs-operator">=</span>False #用来正常显示负号
</code></pre><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">大小</h3><pre data-type="codeBlock" text="plt.rcParams[&apos;figure.figsize&apos;] = (10,5)
plt.rcParams[&apos;figure.dpi&apos;] = 200
"><code>plt.rcParams[<span class="hljs-string">'figure.figsize'</span>] <span class="hljs-operator">=</span> (<span class="hljs-number">10</span>,<span class="hljs-number">5</span>)
plt.rcParams[<span class="hljs-string">'figure.dpi'</span>] <span class="hljs-operator">=</span> <span class="hljs-number">200</span>
</code></pre><h3 id="h-count" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">count条状图</h3><pre data-type="codeBlock" text="sns.countplot(y=&quot;店铺名称&quot;, data=df, color=&quot;c&quot;)
"><code>sns.countplot(y<span class="hljs-operator">=</span><span class="hljs-string">"店铺名称"</span>, data<span class="hljs-operator">=</span>df, color<span class="hljs-operator">=</span><span class="hljs-string">"c"</span>)
</code></pre><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">训练</h2><h3 id="h-lgb" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">lgb</h3><pre data-type="codeBlock" text="n_splits = 5    # 分为5折
seed = 19950115     # 随机种子
gbm=None
# lgb 参数
lgb_params = {
    &quot;learning_rate&quot;: 0.005,
    &quot;lambda_l2&quot;: 0.15,
    &quot;max_depth&quot;: 9,
    &quot;objective&quot;: &quot;binary&quot;,
    &quot;verbose&quot;: -1,
    # &apos;feature_fraction&apos;: 0.9,
    # &quot;min_split_gain&quot;: 0.1,
    &quot;boosting_type&quot;: &quot;gbdt&quot;,
    &quot;subsample&quot;: 0.75,
    &quot;colsample_bytree&quot;: 0.75,
    # &quot;colsample_bylevel&quot;: 0.9,
    &quot;scale_pos_weight&quot;: 16,
    &apos;metric&apos;: [&apos;auc&apos;],  # 评估函数
}

df_train_columns = [c for c in data.columns if c not in [&quot;label&quot;, &quot;uid&quot;, &quot;user_id&quot;]]
label = data[&apos;label&apos;]

predictions = 0
feature_importance_df = pd.DataFrame()
skf = StratifiedKFold(n_splits=n_splits, random_state=seed, shuffle=True)

for fold_, (trn_idx, val_idx) in enumerate(skf.split(data, label.values)):
    print(&quot;fold {}&quot;.format(fold_))
    trn_data = lgb.Dataset(data.iloc[trn_idx][df_train_columns], label=label.iloc[trn_idx])
    val_data = lgb.Dataset(data.iloc[val_idx][df_train_columns], label=label.iloc[val_idx])

    gbm = lgb.train(lgb_params, 
                    trn_data, 
                    # init_model=gbm,  
                    num_boost_round=150000, 
                    valid_sets=[trn_data, val_data],
                    early_stopping_rounds=200, 
                    verbose_eval=200)     # 训练
    # clf = joblib.load(&quot;model/lgb_{}.m&quot;.format(index))     # 保存模型
    # joblib.dump(clf, &quot;model/lgb_{}.m&quot;.format(index))      # 加载模型
    # gbm.save_model(MODEL_PATH+&apos;/lgb_more_fea.model&apos;, num_iteration=gbm.best_iteration)
    y_pred = gbm.predict(data.iloc[val_idx][df_train_columns], num_iteration=gbm.best_iteration)
    # qauc_score = qauc(y_pred, data.iloc[val_idx][df_train_columns], label.iloc[val_idx])
    # print(&quot;qauc: &quot;, qauc_score)
    # y_score.append(qauc_score)  # 计算auc值
    
    fold_importance_df = pd.DataFrame()
    fold_importance_df[&quot;Feature&quot;] = df_train_columns
    fold_importance_df[&quot;importance&quot;] = gbm.feature_importance()
    fold_importance_df[&quot;fold&quot;] = fold_ + 1
    feature_importance_df = pd.concat([feature_importance_df, fold_importance_df], axis=0)
    
    predictions += y_pred.T[0] / skf.n_splits
"><code>n_splits <span class="hljs-operator">=</span> <span class="hljs-number">5</span>    # 分为<span class="hljs-number">5</span>折
seed <span class="hljs-operator">=</span> <span class="hljs-number">19950115</span>     # 随机种子
gbm<span class="hljs-operator">=</span>None
# lgb 参数
lgb_params <span class="hljs-operator">=</span> {
    <span class="hljs-string">"learning_rate"</span>: <span class="hljs-number">0</span><span class="hljs-number">.005</span>,
    <span class="hljs-string">"lambda_l2"</span>: <span class="hljs-number">0</span><span class="hljs-number">.15</span>,
    <span class="hljs-string">"max_depth"</span>: <span class="hljs-number">9</span>,
    <span class="hljs-string">"objective"</span>: <span class="hljs-string">"binary"</span>,
    <span class="hljs-string">"verbose"</span>: <span class="hljs-number">-1</span>,
    # <span class="hljs-string">'feature_fraction'</span>: <span class="hljs-number">0</span><span class="hljs-number">.9</span>,
    # <span class="hljs-string">"min_split_gain"</span>: <span class="hljs-number">0</span><span class="hljs-number">.1</span>,
    <span class="hljs-string">"boosting_type"</span>: <span class="hljs-string">"gbdt"</span>,
    <span class="hljs-string">"subsample"</span>: <span class="hljs-number">0</span><span class="hljs-number">.75</span>,
    <span class="hljs-string">"colsample_bytree"</span>: <span class="hljs-number">0</span><span class="hljs-number">.75</span>,
    # <span class="hljs-string">"colsample_bylevel"</span>: <span class="hljs-number">0</span><span class="hljs-number">.9</span>,
    <span class="hljs-string">"scale_pos_weight"</span>: <span class="hljs-number">16</span>,
    <span class="hljs-string">'metric'</span>: [<span class="hljs-string">'auc'</span>],  # 评估函数
}

df_train_columns <span class="hljs-operator">=</span> [c <span class="hljs-keyword">for</span> c in data.columns <span class="hljs-keyword">if</span> c not in [<span class="hljs-string">"label"</span>, <span class="hljs-string">"uid"</span>, <span class="hljs-string">"user_id"</span>]]
label <span class="hljs-operator">=</span> data[<span class="hljs-string">'label'</span>]

predictions <span class="hljs-operator">=</span> <span class="hljs-number">0</span>
feature_importance_df <span class="hljs-operator">=</span> pd.DataFrame()
skf <span class="hljs-operator">=</span> StratifiedKFold(n_splits<span class="hljs-operator">=</span>n_splits, random_state<span class="hljs-operator">=</span>seed, shuffle<span class="hljs-operator">=</span>True)

<span class="hljs-keyword">for</span> fold_, (trn_idx, val_idx) in enumerate(skf.split(data, label.values)):
    print(<span class="hljs-string">"fold {}"</span>.format(fold_))
    trn_data <span class="hljs-operator">=</span> lgb.Dataset(data.iloc[trn_idx][df_train_columns], label<span class="hljs-operator">=</span>label.iloc[trn_idx])
    val_data <span class="hljs-operator">=</span> lgb.Dataset(data.iloc[val_idx][df_train_columns], label<span class="hljs-operator">=</span>label.iloc[val_idx])

    gbm <span class="hljs-operator">=</span> lgb.train(lgb_params, 
                    trn_data, 
                    # init_model<span class="hljs-operator">=</span>gbm,  
                    num_boost_round<span class="hljs-operator">=</span><span class="hljs-number">150000</span>, 
                    valid_sets<span class="hljs-operator">=</span>[trn_data, val_data],
                    early_stopping_rounds<span class="hljs-operator">=</span><span class="hljs-number">200</span>, 
                    verbose_eval<span class="hljs-operator">=</span><span class="hljs-number">200</span>)     # 训练
    # clf <span class="hljs-operator">=</span> joblib.load(<span class="hljs-string">"model/lgb_{}.m"</span>.format(index))     # 保存模型
    # joblib.dump(clf, <span class="hljs-string">"model/lgb_{}.m"</span>.format(index))      # 加载模型
    # gbm.save_model(MODEL_PATH<span class="hljs-operator">+</span><span class="hljs-string">'/lgb_more_fea.model'</span>, num_iteration<span class="hljs-operator">=</span>gbm.best_iteration)
    y_pred <span class="hljs-operator">=</span> gbm.predict(data.iloc[val_idx][df_train_columns], num_iteration<span class="hljs-operator">=</span>gbm.best_iteration)
    # qauc_score <span class="hljs-operator">=</span> qauc(y_pred, data.iloc[val_idx][df_train_columns], label.iloc[val_idx])
    # print(<span class="hljs-string">"qauc: "</span>, qauc_score)
    # y_score.append(qauc_score)  # 计算auc值
    
    fold_importance_df <span class="hljs-operator">=</span> pd.DataFrame()
    fold_importance_df[<span class="hljs-string">"Feature"</span>] <span class="hljs-operator">=</span> df_train_columns
    fold_importance_df[<span class="hljs-string">"importance"</span>] <span class="hljs-operator">=</span> gbm.feature_importance()
    fold_importance_df[<span class="hljs-string">"fold"</span>] <span class="hljs-operator">=</span> fold_ <span class="hljs-operator">+</span> <span class="hljs-number">1</span>
    feature_importance_df <span class="hljs-operator">=</span> pd.concat([feature_importance_df, fold_importance_df], axis<span class="hljs-operator">=</span><span class="hljs-number">0</span>)
    
    predictions <span class="hljs-operator">+</span><span class="hljs-operator">=</span> y_pred.T[<span class="hljs-number">0</span>] <span class="hljs-operator">/</span> skf.n_splits
</code></pre><p>画特征重要性</p><pre data-type="codeBlock" text="cols = (feature_importance_df[[&quot;Feature&quot;, &quot;importance&quot;]]
        .groupby(&quot;Feature&quot;)
        .mean()
        .sort_values(by=&quot;importance&quot;, ascending=False)[:1000].index)

best_features = feature_importance_df.loc[feature_importance_df.Feature.isin(cols)]

plt.figure(figsize=(14,26))
sns.barplot(x=&quot;importance&quot;,
            y=&quot;Feature&quot;,
            data=best_features.sort_values(by=&quot;importance&quot;,
                                           ascending=False))
plt.title(&apos;LightGBM Features (avg over folds)&apos;)
plt.tight_layout()
"><code>cols <span class="hljs-operator">=</span> (feature_importance_df[[<span class="hljs-string">"Feature"</span>, <span class="hljs-string">"importance"</span>]]
        .groupby(<span class="hljs-string">"Feature"</span>)
        .mean()
        .sort_values(by<span class="hljs-operator">=</span><span class="hljs-string">"importance"</span>, ascending<span class="hljs-operator">=</span>False)[:<span class="hljs-number">1000</span>].index)

best_features <span class="hljs-operator">=</span> feature_importance_df.loc[feature_importance_df.Feature.isin(cols)]

plt.figure(figsize<span class="hljs-operator">=</span>(<span class="hljs-number">14</span>,<span class="hljs-number">26</span>))
sns.barplot(x<span class="hljs-operator">=</span><span class="hljs-string">"importance"</span>,
            y<span class="hljs-operator">=</span><span class="hljs-string">"Feature"</span>,
            data<span class="hljs-operator">=</span>best_features.sort_values(by<span class="hljs-operator">=</span><span class="hljs-string">"importance"</span>,
                                           ascending<span class="hljs-operator">=</span>False))
plt.title(<span class="hljs-string">'LightGBM Features (avg over folds)'</span>)
plt.tight_layout()
</code></pre><p>画树</p><pre data-type="codeBlock" text="fig, ax = plt.subplots(figsize=(100, 100))
lgb.plot_tree(gbm, ax=ax)
"><code>fig, ax <span class="hljs-operator">=</span> plt.subplots(figsize<span class="hljs-operator">=</span>(<span class="hljs-number">100</span>, <span class="hljs-number">100</span>))
lgb.plot_tree(gbm, ax<span class="hljs-operator">=</span>ax)
</code></pre><h3 id="h-xgb" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">xgb</h3><pre data-type="codeBlock" text="xgb1 = xgb.XGBClassifier(max_depth=9,
                       learning_rate=0.005,
                       n_estimators=10000,
                       colsample_bytree=0.75,
                       sub_sample=0.75,
                       reg_lambda=0.15,
                       n_jobs=4,
                       random_state=3,
                       scale_pos_weight = 16)

df_train_columns = [c for c in data.columns if c not in [&quot;label&quot;, &quot;uid&quot;, &quot;user_id&quot;]]
label = data[&apos;label&apos;]

n_splits = 5    # 分为5折
seed = 19950115     # 随机种子
skf = StratifiedKFold(n_splits=n_splits, random_state=seed, shuffle=True)

for fold_, (trn_idx, val_idx) in enumerate(skf.split(data, label.values)):
    print(&quot;fold {}&quot;.format(fold_))
    X_train = data.iloc[trn_idx][df_train_columns]
    y_train = label.iloc[trn_idx]
    X_valid = data.iloc[val_idx][df_train_columns]
    y_valid = label.iloc[val_idx]
    
    watchlist = [(X_train,y_train),(X_valid,y_valid)]

    xbm = xgb1.fit(
                X=X_train,
               y=y_train,
                eval_set  = watchlist,
                early_stopping_rounds=200,
                verbose =100,
                eval_metric=&apos;auc&apos;,
                )     # 训练
"><code><span class="hljs-attr">xgb1</span> = xgb.XGBClassifier(max_depth=<span class="hljs-number">9</span>,
                       <span class="hljs-attr">learning_rate</span>=<span class="hljs-number">0.005</span>,
                       <span class="hljs-attr">n_estimators</span>=<span class="hljs-number">10000</span>,
                       <span class="hljs-attr">colsample_bytree</span>=<span class="hljs-number">0.75</span>,
                       <span class="hljs-attr">sub_sample</span>=<span class="hljs-number">0.75</span>,
                       <span class="hljs-attr">reg_lambda</span>=<span class="hljs-number">0.15</span>,
                       <span class="hljs-attr">n_jobs</span>=<span class="hljs-number">4</span>,
                       <span class="hljs-attr">random_state</span>=<span class="hljs-number">3</span>,
                       <span class="hljs-attr">scale_pos_weight</span> = <span class="hljs-number">16</span>)

<span class="hljs-attr">df_train_columns</span> = [c for c in data.columns if c not in [<span class="hljs-string">"label"</span>, <span class="hljs-string">"uid"</span>, <span class="hljs-string">"user_id"</span>]]
<span class="hljs-attr">label</span> = data[<span class="hljs-string">'label'</span>]

<span class="hljs-attr">n_splits</span> = <span class="hljs-number">5</span>    <span class="hljs-comment"># 分为5折</span>
<span class="hljs-attr">seed</span> = <span class="hljs-number">19950115</span>     <span class="hljs-comment"># 随机种子</span>
<span class="hljs-attr">skf</span> = StratifiedKFold(n_splits=n_splits, random_state=seed, shuffle=<span class="hljs-literal">True</span>)

for fold_, (trn_idx, val_idx) in enumerate(skf.split(data, label.values)):
    print("fold {}".format(fold_))
    <span class="hljs-attr">X_train</span> = data.iloc[trn_idx][df_train_columns]
    <span class="hljs-attr">y_train</span> = label.iloc[trn_idx]
    <span class="hljs-attr">X_valid</span> = data.iloc[val_idx][df_train_columns]
    <span class="hljs-attr">y_valid</span> = label.iloc[val_idx]
    
    <span class="hljs-attr">watchlist</span> = [(X_train,y_train),(X_valid,y_valid)]

    <span class="hljs-attr">xbm</span> = xgb1.fit(
                <span class="hljs-attr">X</span>=X_train,
               <span class="hljs-attr">y</span>=y_train,
                <span class="hljs-attr">eval_set</span>  = watchlist,
                <span class="hljs-attr">early_stopping_rounds</span>=<span class="hljs-number">200</span>,
                <span class="hljs-attr">verbose</span> =<span class="hljs-number">100</span>,
                <span class="hljs-attr">eval_metric</span>=<span class="hljs-string">'auc'</span>,
                )     <span class="hljs-comment"># 训练</span>
</code></pre><p>画特征重要性</p><pre data-type="codeBlock" text="fig, ax = plt.subplots(figsize=(14, 26))
xgb.plot_importance(xbm, ax=ax, height=0.3)
"><code>fig, ax <span class="hljs-operator">=</span> plt.subplots(figsize<span class="hljs-operator">=</span>(<span class="hljs-number">14</span>, <span class="hljs-number">26</span>))
xgb.plot_importance(xbm, ax<span class="hljs-operator">=</span>ax, height<span class="hljs-operator">=</span><span class="hljs-number">0</span><span class="hljs-number">.3</span>)
</code></pre><p>画树</p><pre data-type="codeBlock" text="xgb.plot_tree(clf, num_trees=0, fmap=&apos;xgb.fmap&apos;)
fig = plt.gcf()
fig.set_size_inches(150, 100)
plt.show()
"><code>xgb.plot_tree(clf, num_trees<span class="hljs-operator">=</span><span class="hljs-number">0</span>, fmap<span class="hljs-operator">=</span><span class="hljs-string">'xgb.fmap'</span>)
fig <span class="hljs-operator">=</span> plt.gcf()
fig.set_size_inches(<span class="hljs-number">150</span>, <span class="hljs-number">100</span>)
plt.show()
</code></pre>]]></content:encoded>
            <author>cabbage@newsletter.paragraph.com (cabbage)</author>
        </item>
    </channel>
</rss>