1、原创R语言Logistic逻辑回归算法案例数据分析报告R语言Logistic逻辑回归算法案例如果线性回归用于预测连续的Y变量,则逻辑回归用于二元分类。如果我们使用线性回归来模拟二分变量(作为Y),则得到的模型可能不会将预测的Y s限制在0和1之内。此外,线性回归的其他假设(例如误差的正态性)可能会被违反。因此,我们建模事件ln的对数几率(P1 - P.)升(P1- P),其中,P是事件的概率。 上面的等式可以使用参数glm()设置来建模。但是我们对事件的概率比事件的对数几率更感兴趣。因此,上述模型的预测值,即事件的对数几率,可以转换为事件概率,如下所示:familybinomial 使用该pl
2、ogis()函数实现此转换,如下所示,当我们构建logit模型并进行预测时。示例问题让我们尝试使用基于adult数据中可用的人口统计变量的逻辑回归来预测个人是否会获得超过50,000美元的收入。在这个过程中,我们将:1. 导入数据2. 检查课堂偏见3. 创建培训和测试样本4. 计算信息值以找出重要变量5. 构建logit模型并预测测试数据6. 做模型诊断导入数据inputData AGE WORKCLASS FNLWGT EDUCATION EDUCATIONNUM MARITALSTATUS#= 1 39 State-gov 77516 Bachelors 13 Never-married#
3、= 2 50 Self-emp-not-inc 83311 Bachelors 13 Married-civ-spouse#= 3 38 Private 215646 HS-grad 9 Divorced#= 4 53 Private 234721 11th 7 Married-civ-spouse#= 5 28 Private 338409 Bachelors 13 Married-civ-spouse#= 6 37 Private 284582 Masters 14 Married-civ-spouse# OCCUPATION RELATIONSHIP RACE SEX CAPITALGA
4、IN CAPITALLOSS#= 1 Adm-clerical Not-in-family White Male 2174 0#= 2 Exec-managerial Husband White Male 0 0#= 3 Handlers-cleaners Not-in-family White Male 0 0#= 4 Handlers-cleaners Husband Black Male 0 0#= 5 Prof-specialty Wife Black Female 0 0#= 6 Exec-managerial Wife White Female 0 0# HOURSPERWEEK
5、NATIVECOUNTRY ABOVE50K#= 1 40 United-States 0#= 2 13 United-States 0#= 3 40 United-States 0#= 4 40 United-States 0#= 5 40 Cuba 0#= 6 40 United-States 0检查类偏差理想情况下,Y变量中事件和非事件的比例应大致相同。因此,让我们首先检查因变量中类的比例ABOVE50K。table(inputData$ABOVE50K)# 0 1 # 24720 7841显然,存在阶级偏差,当事件的比例远小于非事件的比例时观察到的条件。所以我们必须以大致相等的比例对观
6、测结果进行采样,以获得更好的模型创建培训和测试样本解决类偏差问题的一种方法trainingData是以相等的比例绘制(开发样本)的0和1 。在这样做时,我们会将inputData未包含的其余部分用于培训testData(验证样本)。因此,开发样本的大小将小于验证,这是可以的,因为有大量的观察结果( 10K)。# Create Training Datainput_ones - inputDatawhich(inputData$ABOVE50K = 1), # all 1sinput_zeros - inputDatawhich(inputData$ABOVE50K = 0), # all 0s
7、set.seed(100) # for repeatability of samplesinput_ones_training_rows - sample(1:nrow(input_ones), 0.7*nrow(input_ones) # 1s for traininginput_zeros_training_rows - sample(1:nrow(input_zeros), 0.7*nrow(input_ones) # 0s for training. Pick as many 0s as 1straining_ones - input_onesinput_ones_training_r
8、ows, training_zeros - input_zerosinput_zeros_training_rows, trainingData - rbind(training_ones, training_zeros) # row bind the 1s and 0s # Create Test Datatest_ones - input_ones-input_ones_training_rows, test_zeros - input_zeros-input_zeros_training_rows, testData - rbind(test_ones, test_zeros) # ro
9、w bind the 1s and 0s接下来,需要找到变量的信息值,以了解它们在解释因变量(ABOVE50K)时的价值。为分类变量创建WOE(可选)或者,我们可以WOE为所有分类变量创建等价物。这只是一个可选步骤,为简单起见,此步骤不适用于此分析。for(factor_var in factor_vars) inputDatafactor_var AGE WORKCLASS FNLWGT EDUCATION EDUCATIONNUM MARITALSTATUS OCCUPATION# 1 39 0.1608547 77516 0.7974104 13 -1.8846680 -0.713645
10、# 2 50 0.2254209 83311 0.7974104 13 0.9348331 1.084280# 3 38 -0.1278453 215646 -0.5201257 9 -1.0030638 -1.555142# 4 53 -0.1278453 234721 -1.7805021 7 0.9348331 -1.555142# 5 28 -0.1278453 338409 0.7974104 13 0.9348331 0.943671# 6 37 -0.1278453 284582 1.3690863 14 0.9348331 1.084280# RELATIONSHIP RACE
11、 SEX CAPITALGAIN CAPITALLOSS HOURSPERWEEK# 1 -1.015318 0.08064715 0.3281187 2174 0 40# 2 0.941801 0.08064715 0.3281187 0 0 13# 3 -1.015318 0.08064715 0.3281187 0 0 40# 4 0.941801 -0.80794676 0.3281187 0 0 40# 5 1.048674 -0.80794676 -0.9480165 0 0 40# 6 1.048674 0.08064715 -0.9480165 0 0 40# NATIVECO
12、UNTRY ABOVE50K# 1 0.02538318 0# 2 0.02538318 0# 3 0.02538318 0# 4 0.02538318 0# 5 0.11671564 0# 6 0.02538318 0计算信息值该smbinning:smbinning函数使用递归分区将连续变量转换为分类变量。我们将首先将它们转换为分类变量,然后捕获所有变量的信息值iv_dflibrary(smbinning)# segregate continuous and factor variablesfactor_vars - c (WORKCLASS, EDUCATION, MARITALSTAT
13、US, OCCUPATION, RELATIONSHIP, RACE, SEX, NATIVECOUNTRY)continuous_vars - c(AGE, FNLWGT,EDUCATIONNUM, HOURSPERWEEK, CAPITALGAIN, CAPITALLOSS)iv_df - data.frame(VARS=c(factor_vars, continuous_vars), IV=numeric(14) # init for IV results# compute IV for categoricalsfor(factor_var in factor_vars) smb - s
14、mbinning.factor(trainingData, y=ABOVE50K, x=factor_var) # WOE table if(class(smb) != character) # heck if some error occured iv_dfiv_df$VARS = factor_var, IV - smb$iv # compute IV for continuous varsfor(continuous_var in continuous_vars) smb - smbinning(trainingData, y=ABOVE50K, x=continuous_var) # WOE table if(class(smb) != character) # any error while calculating scores. iv_dfiv_df$VARS = continuous_var, IV - smb$iv iv_df VARS IV# RELATIONSHIP 1.5739# MARITALSTATUS 1.3356# AGE 1.1748#
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1