01 生活中,我们经常遇到以下问题
如何预测一个用户是否购买某件商品?
如何预测用户流失概率?
如何判断用户的性别?
如何预测用户是否点击某商品?
如何判断一天评论是正面还是负面?
预测用户是否点击某个广告
如何预测肿瘤是否是恶性的等等
02 如何选择算法模型解决问题?
现实中的这些问题可以归类为分类问题 或者是二分类问题。逻辑回归是为了就是解决这类问题。根据一些已知的训练集训练好模型,再对新的数据进行预测属于哪个类,并且概率是多少。比如用户是否点击某个广告、肿瘤是否是恶性的、用户的性别,等等。
逻辑回归(Logistic regression 或logit regression),即逻辑模型(英语:Logit model,也译作“评定模型”、“分类评定模型”)是离散选择法模型之一,主要是针对因变量为分类变量而进行回归分析的一种统计方法,属于概率型非线性回归。它的有点是算法简单高效,在实际生活中应用广泛;缺点是离散型的数据需要通过生成虚拟变量进行使用。
02 什么是逻辑回归?
逻辑回归是一种广义的线性回归,通过构造回归函数,利用sklearn库实现分类或预测。它使用的函数是Sigmoid函数,也称为s函数,双弯曲线。它把数据集分为0-1区间,然后根据0.5把数据分两类。一类是(0.5 –1);另外一个类是(0——0.5)。当x>0是, 我们把数据归为一类,x<0时,我们把数据归为另一类。
在逻辑回归中,x使用一个y表示,也就是y=f(x1,x2,x3)= a1x1+a2x2+….+anxn。逻辑回归的关键是找到a1,a2,,,an的参数,然后就得到y,进而得到x。最后就可以根据x预测属于哪一类。
03 案例:运用逻辑回归预测用户是否购房
已知某公司的地产中介数据库,包括年龄、教育水平、房屋所有等信息。请根据已知用户信息预测是否购买房产。
是否购买房产是二分问题。用户要么购买,要么租房。这些信息可以使用0 1 表示。我们使用逻辑回归实现该问题。
04 解析流程
因为预测的结果是一个是否题目,要么购买、要么租房。它符合逻辑回归特征。但是数据集中包含很多离散类型变量,需要进行虚拟化处理。首先,我们可以确定逻辑回归流程
代码如下:
import pandas from sklearn.linear_mode import LogisticRegression def main(): """ 主函数流程 :return: """ file_name = 'data.csv' # 预测数据 自变量 predict_aim = 40 # 第一步 数据处理 processed_data = process_data(file_name) # 第二步 转换数据类型 input_data, output_data = data_2_category(processed_data) # 第三步 建立逻辑回归模型 logistic_model = model_data(input_data, output_data) # 第四步 根据模型预测结果 predict_data(logistic_model) if __name__ == '__main__': # 主函数 main()05 第一步:数据处理
数据处理主要是导入数据集,然后对其进行处理。首先,我们使用pandas.read_csv读取数据文件,然后通过data.shape查看数据集中包括3187行,21列。最后,我们使用dropna()去除数据集中的缺失值,去除后还剩下3085行。如果不去除这些值,它们会影响模型的训练。因此,数据挖掘的第一步就是清理数据,使得它整洁干净,符合数据挖掘算法的要求。(文末扫码 获得源代码和数据集)
06 第二步:虚拟化处理
由于数据集中包括离线类型数据,比如性别等列,我们需要对其进行虚拟化处理。这些变量分有大小意义与无大小的变量。(文末扫码 获得源代码和数据集)
虚拟化处理 def data_2_category(processed_data): ''' 第二步:转换数据集 把离散型数据转化为连续型数据分两部分: 第一部分:无大小意义的数据 使用get_dummies()处理 第二部分:有大小意义的数据 使用map()处理 :param processed_data: :return: ''' # 处理无大小意义的数据 print('*' * 20) print('开始处理无大小意义的列') dummies_data = data_2_category_get_dummies(processed_data) # print(dummies_data.columns) # 处理有大小意义的数据,返回处理后的数据集 print('*' * 20) print('开始处理有大小意义的列') dummies_data_final = data_2_category_map(dummies_data)07 第三步:建立回归模型
我们使用sklearn中的逻辑回归模型对数据建模。首先,创建模型logistic_model,然后使用fit()训练输入与输出数据,进而得到模型的评分是0.8424635332252837。符合预期,我们可以使用该模型进行预测
建立模型 def model_data(input_data, output_data): ''' 第三步:建立回归模型 :param input_data: :param output_data: :return: ''' logistic_model = LogisticRegression() # 训练数据集 logistic_model.fit(input_data, output_data) # 评分数据集 logistic_model_score = logistic_model.score(input_data, output_data) print(f'数据集的逻辑回归得分是{logistic_model_score}') return logistic_model 数据集的逻辑回归得分是0.842463533225283708 第四步:预测
根据模型评分,我们可以看使用它进行预测。对新的数据集预测,我们也需要三步骤。
第一步:数据处理主要是导入数据,并且删除确实。
第二步:处理离散值变量为虚拟变量
第三步:由于模型已经创建成功,我们只需要使用并且预测数据。
根据预测结果,我们得知[0 0 0 0 0 0 0 0]。这说明数据集中的每个人都购置房产。
预测数据 def predict_data(logistic_model): """ 根据训练集的模型,我们可以进行对新的数据集进行预测 :param logistic_model: :return: """ print() print('*' * 20) print('* 开始处理新的数据') print('*' * 20) file_name = 'newData.csv' # 第一步 数据处理 new_data = process_data(file_name) print(new_data.shape) # 第二步:转换数据类型 input_new_data,output_new_data = data_2_category(new_data) print('得到新的数据集的输入') print(input_new_data.shape) print(output_new_data.shape) # 第三步:预测数据 result_input = logistic_model.predict(input_new_data) print('预测后的结果是:') print(result_input) # 输出预测的属性 proba_input = logistic_model.predict_proba(input_new_data) print('每一个类别的概率是:') print(proba_input) # 回归方程的参数是 coef_log = logistic_model.coef_ print('回归方程的参数是:') print(coef_log) # 截距 intercept_input = logistic_model.intercept_ print('回归方程的截距是:') print(intercept_input) 得到新的数据集的输入 (8, 35) (8, 1) 预测后的结果是: [0 0 0 0 0 0 0 0] 每一个类别的概率是: [[0.7919836 0.2080164 ] [0.87626858 0.12373142] [0.94658152 0.05341848] [0.98407936 0.01592064] [0.8974075 0.1025925 ] [0.93894934 0.06105066] [0.91021008 0.08978992] [0.95289655 0.04710345]] 回归方程的参数是: [[-9.21438094e-02 -6.24883209e-01 -9.69316011e-01 -4.47613809e-01 1.89401190e-01 1.04775826e-01 4.66224817e-04 1.92878643e-01 1.99245876e-01 4.27647983e-02 -6.95829770e-02 9.99518066e-02 1.85677580e-01 4.04643649e-01 2.77475439e-01 4.63136576e-01 1.18515339e-01 8.80706906e-01 -1.29244267e-02 -6.26125189e-01 5.52697914e-02 -3.26483869e-01 3.38429268e-01 4.69881067e-01 9.03829123e-01 3.76992082e-01 4.31214139e-01 3.25470843e-01 1.78913910e-02 5.74949532e-01 9.43142296e-01 4.56312427e-01 8.51014333e-01 2.42053025e-01 6.95736936e-01]] 回归方程的截距是: [3.49839379]请扫码获得完整代码,手把手指导你学Python
只需7天时间,跨进Python编程大门,已有3800+加入
【基础】0基础入门python,24小时有人快速解答问题;
【赠予】后续圈主将开发python,0基础入门在线课程,免费送给圈友们,供巩固和系统化复习
(三重福利)最近入圈送大礼包:
1、2.7G、308份最新数据分析报告