网站新闻页面无法翻页,宣传册设计与制作合同,电商网站模板免费,wordpress程序一直503文章目录 逻辑回归模型逻辑回归对于特征处理的优势逻辑回归处理特征的步骤 GBDT算法GBDTLR算法GBDT LR简单代码实现 逻辑回归模型 逻辑回归#xff08;LR,Logistic Regression#xff09;是一种传统机器学习分类模型#xff0c;也是一种比较重要的非线性回归模型#xff0… 文章目录 逻辑回归模型逻辑回归对于特征处理的优势逻辑回归处理特征的步骤 GBDT算法GBDTLR算法GBDT LR简单代码实现 逻辑回归模型 逻辑回归LR,Logistic Regression是一种传统机器学习分类模型也是一种比较重要的非线性回归模型其本质上是在线性回归模型的基础上加了一个Sigmoid函数也就是非线性映射由于其简单、高效、易于并行计算的特点在工业界受到了广泛的应用。 使用LR模型主要是用于分类任务通常情况下也都是二分类任务一般在推荐系统的业务中会使用LR作为Baseline模型快速上线。 从本质上来讲逻辑回归和线性回归一样同属于广义线性模型。虽然说逻辑回归可以实现回归预测但是在推荐算法中我们都将其看作是线性模型并把它应用在分类任务中。 总结逻辑回归实际上就是在数据服从伯努利分布的假设下通过极大似然的方法运用梯度下降算法对参数进行求解从而达到二分类。 QA Q为什么在推荐系统中使用逻辑回归而不是线性回归A原因主要有三点 1. 虽然两者都是处理二分类问题但是线性回归主要是处理连续性特征例如一个人的身高体重而推荐系统中对于一个物品推荐给用户物品的特征是离散的。因此不好用线性回归作为预测 2. 逻辑回归模型具有较高的可解释性可以帮助我们更好地理解推荐系统中不同因素对推荐结果的影响而线性回归在这一点上无法实现我们的需求。 3. 推荐系统中往往存在很多的噪音逻辑回归可以更好地处理异常值避免推荐结果被干扰。
逻辑回归对于特征处理的优势
特征选择可以使用正则化技术来选择重要的特征提高模型效率和准确性。处理非线性特征可以通过引入多项式和交互特征来处理非线性特征从而预测结果更加准确。处理缺失值和异常值可以通过处理缺失值和异常值使得模型更佳健壮从而预测结果更加准确。训练模型速度训练速度相对较快。
逻辑回归处理特征的步骤
特征选择逻辑回归可以使用正则化技术L1、L2正则化来选择最重要的特征从而降低维度并去除无关特征。选择相关的特征有助于提高模型的稳定性和准确性。处理缺失值和异常值逻辑回归可以使用缺失值插补和异常值检测来处理缺失值和异常值从而避免对模型产生影响提高模型的健壮性。处理非线性特征逻辑回归可以通过引入多项式和交互特征来处理非线性特征从而增强模型的表现力。以多项式模型为例逻辑回归可以使用幂函数或指数函数对特征进行转换从而处理非线性变量。特征标准化逻辑回归可以使用特征标准化来消除特征数据值的量纲影响避免数值范围大的特征对模型产生很大影响。特征工程逻辑回归也可以使用特征工程来创建新的特征例如聚合或拆分现有特征、提取信号等。这有助于发现与目标变量相关的新信息从而改进对数据的理解。
GBDT算法
GBDTGradient Boosting Decision Tree算法是一种基于决策树的集成学习算法它的学习方式是梯度提升它通过不断训练决策树来提高模型的准确性。GBDT在每一次训练中都利用当前的模型进行预测并将预测误差作为新的样本权重然后训练下一棵决策树模型来拟合加权后的新数据。GBDT中的B代表的是Boosting算法Boosting算法的基本思想是通过将多个弱分类器线性组合形成一个强分类器达到优化训练误差和测试误差的目的。具体应用时每一轮将上一轮分类错误的样本重新赋予更高的权重这样一来下一轮学习就容易重点关注错分样本提高被错分样本的分类准确率。GBDT由多棵CART树组成本质是多颗回归树组成的森林。每一个节点按贪心分裂最终生成的树包含多层这就相当于一个特征组合的过程。理论上来说如果可以无限制的生成决策树GBDT就可以无限逼近由所有训练样本所组成的目标拟合函数从而达到减小误差的目的同样这种思想后来也被运用在了ResNet残差神经网络上。在推荐系统中我们使用GBDT算法来优化和提高个性化推荐的准确性。通过GBDT算法对用户历史行为数据进行建模和学习可以很容易地学习到用户的隐式特征例如品味偏好消费能力等。另外GBDT算法可以自动选择重要的特征对离散型和连续型特征进行处理如缺失值填充、离散化等为特征工程提供更好的支持。
GBDTLR算法
在推荐系统中使用GBDTLR结合算法主要是用于处理点击率预估这个也是facebook在2014年发表的论文Practical Lessons from Predicting Clicks on Ads at Facebook。根据点击率预估的结果进行排序所以GBDTLR用于排序层。GBDTLR架构图 整个模型主要分为两个步骤上面的GBDT和下面的LR。主要分为五个步骤 GBDT训练使用GBDT对原始数据进行训练并生成特征。在训练过程中每棵树都是基于前一棵树的残差进行构建。这样GBDT可以逐步减少残差生成最终的目标值。特征转换使用GBDT生成的特征进行转换。这些特征是树节点的输出每个特征都对应于一个叶子节点。在转换过程中每个叶子节点都会被转换为一个新的特征向量代表这个叶子节点与其他节点的相对位置并将这些特征向量连接起来形成新的训练集用于下一步LR。特征归一化对生成的特征进行归一化处理确保不同维度的特征在训练过程中具有相等的权重。LR训练使用LR对转换后的特征进行二分类或回归。特征向量被送入LR模型中进行训练以获得最终的分类模型。在训练过程中使用梯度下降法来更新模型参数以最小化损失函数损失函数的选择取决于分类问题的具体情况。模型预测训练完成后使用LR模型对新的数据进行预测。GBDTLR模型将根据特征生成函数和逻辑回归模型预测新数据的类别或值。 GBDT LR优缺点 优点 提高模型预测精度 模型具有鲁棒性和可扩展性 具有良好的可解释性缺点建模复杂度高 训练时间计算成本高 对异常值和噪声数据敏感
GBDT LR简单代码实现
import pandas as pd
import numpy as np
import lightgbm as lgb
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import f1_score, accuracy_score, precision_score, recall_score
from sklearn.preprocessing import OneHotEncoder# 读取数据集
# 数据集地址https://grouplens.org/datasets/movielens/
ratings pd.read_csv(../../data/ml-1m/ratings.dat, sep::, headerNone, names[user_id, movie_id, rating, timestamp], encodingISO-8859-1, enginepython)
movies pd.read_csv(../../data/ml-1m/movies.dat, sep::, headerNone, names[movie_id, title, genres], encodingISO-8859-1, enginepython)
# 将两个数据集根据movie_id合并并去掉timestamptitle
data pd.merge(ratings, movies, onmovie_id).drop(columns[timestamp, title])
# print(data.head(50))# genres字段转换为多个二值型变量(使用pandas的get_dummies函数)
genres_df data.genres.str.get_dummies(sep|)
# genres_df pd.get_dummies(data[genres])
# print(genres_df.head(50))
data pd.concat([data, genres_df], axis1).drop(columns[genres])
# print(data.head(50))# 提取出用于训练 GBDT 模型和 LR 模型的特征和标签
features data.drop(columns[user_id, movie_id, rating])
# print(features.head(50))
label data[rating]# 划分训练集和测试集(8,2开)
split_index int(len(data) * 0.8)
train_x, train_y features[:split_index], label[:split_index]
test_x, test_y features[split_index:], label[split_index:]# 训练GBDT模型
n_estimators100
gbdt_model lgb.LGBMRegressor(n_estimatorsn_estimators, max_depth5, learning_rate0.1)
gbdt_model.fit(train_x, train_y)
gbdt_train_leaves gbdt_model.predict(train_x, pred_leafTrue)
gbdt_test_leaves gbdt_model.predict(test_x, pred_leafTrue)# 将GBDT输出的叶子节点ID转换为one-hot编码的特征
one_hot OneHotEncoder()
one_hot_train one_hot.fit_transform(gbdt_train_leaves).toarray()
one_hot_test one_hot.fit_transform(gbdt_test_leaves).toarray()# 训练LR模型
lr_model LogisticRegression(C1.0, class_weightNone, dualFalse, fit_interceptTrue,intercept_scaling1, l1_ratioNone, max_iter100,multi_classauto, n_jobsNone, penaltyl2,random_stateNone, solverlbfgs, tol0.0001, verbose0,warm_startFalse)
lr_model.fit(one_hot_train, train_y)# 在测试集上评估模型性能
y_pred lr_model.predict(one_hot_test)
print(fAccuracy: {accuracy_score(test_y, y_pred)})
print(fPrecision: {precision_score(test_y, y_pred, averagemacro)})
print(fRecall: {recall_score(test_y, y_pred, averagemacro)})
print(fF1-Score (macro): {f1_score(test_y, y_pred, averagemacro)})