Logisitc Regression 预测员工离职率

Logistic Regression 基础

Logistic Regression 沿用了 Linear Regression 的思路和想法,通过使用线性关系拟合得到真实的函数关系。同样的,如果模型结果表现不好,可能是超参数没调好,或者是训练集的特征没处理好(可以多构造一些特征,将线性特征构造成为非线性特征之类的)。

由于用Linear Regression 求得的解范围是 正无穷 到 负无穷,而最后得到只是某一分类的概率,其取值范围是 [0,1],所以我们需要将最后得到的值经过某个合适的投影,投射到 [0,1] 范围内。

这里就引入了 odds 的概念 和 sigmoid 函数。

引入 odds 的原因是,想要将概率投射到 [0, 正无穷] 这个范围上,所以要引入 odds。

引入 sigmoid 函数的原因是,想要将 [0, 正无穷] 投射到 [负无穷,正无穷] 这个范围上,所以要引入 sigmoid 函数。


Logistic Regression 预测员工离职率

直接调库运算

from sklearn.linear_model import LogisticRegression
from patsy import dmatrices                    # 作用是将 离散变量变为 哑变量
y,X = dmatrices('left~satisfaction + last_evaluation + number_project 
+ C(sales) + C(salary), data, return_type = 'dataframe')
 # C(sales) 表示 将 sales 变成哑变量
model = LogisticRegression()
model.fit(X,y)
pd.DataFrame(list(zip(X.columns, np.transpose(model.coesf_))))  # 显示系数
pred = model.predict(x)                        # 进行预测

Logistic Regression 理论上是通过梯度下降法来求解的。


LR 的普通 gradient descend 代码如下所示:

# 这需要事先知道导数是什么,计算机可不会帮你去求导
# 我们需要做的就是不断更新这个导数
# 更新的步长是我们自己设定的,或者是 error 到达某一个比较小的值
np.random.seed(1)
alpha = 1 # learning rate 这个值是比较重要的
beta = np.random.randn(X.shape[1])      # 随机初始化一个梯度
for T in range(500):    # 迭代次数
    prob = np.array(1./ ( 1 + np.exp(-np.matmul(X, beta)))).ravel()
    prob_y = list(zip(prob, y))                   # 为了下面计算 loss 用的, 对 gd 没啥作用
    loss = -sum([np.log(p) if y == 1 else np.log(1-p) for p, y in prob)y]) / len(y)  
    # 计算 loss, 目的是为了比较用的,对 gd 没啥作用
    error_rate = 0
    for i in range(len(y)):
        if ((prob[i] > 0.5 and y[i] == 0) or (prob[i] <= 0.5 and y[i] == 1)):
            error_rate += 1
    error_rate /= len(y)
    if T % 5 ==0:
        print('T=' + str(T) + 'loss = ' + str(loss) + 'error = ; + str(error_rate)) # 目的是实时输出一个 loss 和 eoor
    deriv = np.zeros(X.shape[1])
   
 for i in range(len(y)):                       # 对每一个 instance 都计算其导数
        deriv += np.asarray(X[i,:].ravel() * (prob[i] - y[i])  # 把所有 instance 对应的导数加起来
 deriv /= len(y)                               # 求一个平均值
 beta -= alpha * deriv                         # 更新这个 beta

对于整个更新的过程,最实质的代码是

 for i in range(len(y)):                       # 对每一个 instance 都计算其导数
       deriv += np.asarray(X[i,:].ravel() * (prob[i] - y[i])  # 把所有 instance 对应的导数加起来
 deriv /= len(y)                               # 求一个平均值
 beta -= alpha * deriv                         # 更新这个 beta

这里计算 prob[i] 的原因是导数中有这一项,所以要在这里进行计算。

Logistic Regression 中的正则化

关于正则化,首先需要明白的一个结论是:beta (模型中的系数) 越大,则说明模型越复杂。

为了避免overfitting的问题,我们在模型中引入正则化系数。正则化系数设为R。R值越大,则最后训练出来的 beta 值越小。模型越简单。

给正则话系数赋值的操作如下所示:

model = LogisticRegression(C = 1e5)

C 的值是 正则化系数的 倒数。


为了实现利用Python进行大数据分析并预测员工离职率,你可以通过学习《Python大数据分析与机器学习实战:员工离职预测教程》来获得必要的知识和技能。这本书将会教你如何通过Python的数据处理库和机器学习库来构建预测模型。 参考资源链接:[Python大数据分析与机器学习实战:员工离职预测教程](https://wenku.youkuaiyun.com/doc/3b2kpp42ja?spm=1055.2569.3001.10343) 首先,你需要准备和清洗数据集。使用Pandas库可以方便地加载数据,并处理缺失值和异常值。例如,你可以使用Pandas的`dropna()`和`fillna()`函数来处理缺失数据,使用`drop_duplicates()`函数来去除重复的记录。 其次,数据探索和特征工程是构建预测模型前的重要步骤。通过使用`describe()`和`info()`函数可以获取数据的基本统计信息,而`matplotlib`和`seaborn`库可以帮助你进行数据可视化,识别数据中的趋势和模式。对于特征工程,可能涉及到创建新的特征,比如通过员工的工作年限和平均绩效评分来创建一个新的特征。 接下来,选择合适的机器学习算法进行模型训练是关键。逻辑回归是一个常用的起点,因为它易于解释并且可以提供预测概率。在Python中,你可以使用Scikit-learn库来实现逻辑回归模型。使用`LogisticRegression()`函数创建模型实例,并通过`fit()`方法来训练模型。训练完成后,可以使用`predict_proba()`方法来获取离职概率的预测。 为了评估模型的性能,你可以使用混淆矩阵、准确率、召回率、精确率和F1分数等指标。此外,交叉验证是避免过拟合和评估模型泛化能力的重要技术。Scikit-learn提供了`cross_val_score()`函数,可以帮助你方便地进行交叉验证。 最后,模型的调优和部署也是不可忽视的环节。通过调整模型参数和尝试不同的算法(比如决策树、随机森林等),你可以提升模型的预测准确率。模型训练完成后,可以使用模型的`save()`方法或类似的工具将其保存,便于将来在生产环境中使用。 通过以上步骤,你将能够使用Python进行大数据分析,并构建有效的机器学习模型来预测员工离职率。为了更深入地理解和掌握整个过程,《Python大数据分析与机器学习实战:员工离职预测教程》将是你宝贵的学习资源。 参考资源链接:[Python大数据分析与机器学习实战:员工离职预测教程](https://wenku.youkuaiyun.com/doc/3b2kpp42ja?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值