lr(逻辑回归)算法实现(代码片段)

土味儿大谢 土味儿大谢     2022-12-21     647

关键词:

现在做的不是做预测某个人未来信用卡支出多少钱这类的预测工作,而是通过对过去的数据去分析哪些因素是信用卡支出的显著影响因素

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
import numpy as np
import pandas as pd
import os
os.getcwd()   # 查看工作目录
os.chdir(r"F:\\\\Anaconda3\\\\LR")  # 改变工作目录,数据文件要放在这个工作目录里是最简单导入数据的方法

# 导入数据集
data_raw = pd.read_excel("LR_practice.xlsx")#要见名知意的起名,raw data为原始数据
data_raw.info()#查看数据情况

data_raw


# 删除无用变量
data_raw.drop(["id", "Acc", "edad2"], axis = 1, inplace = True)#按列操作axis = 1;inplace=True确定真的要删

筛选哪一列没用哪一列有用,要根据数据字典去筛选
开始数据清洗的操作(缺失值、异常值、重复值、哑变量)

# 处理重复值
data_raw = data_raw.drop_duplicates()
# 缺失值
data_raw.isnull().mean()#查看缺失值占比

#处理缺失值,推荐用fillna()
data_raw["avg_exp"] = data_raw["avg_exp"].fillna(data_raw["avg_exp"].mean())#用均值去填补缺失值,然后再次运行上面代码,会发现该列缺失值没了


把非数值类型的变为数值类型就是数据编码

# 数据编码   .map(用于向量series)/.apply(用于dataframe)
data_raw["gender"] = data_raw["gender"].map("Male": 1, "Female": 0)#.map(用于向量series)/.apply(用于dataframe)

label = data_raw["edu_class"].unique().tolist()#unique返回所有元素,tolist转换为列表
data_raw["edu_class"] = data_raw["edu_class"].apply(lambda x: label.index(x))#index返回列表内元素的下标。lambda x: label.index(x):apply前面的元素会传入x,然后用index看传进来的这个元素是在上面的list里面的第几个
#只要我一想到我要对某个变量内每个元素做一个什么对应操作,第一反应就是用apply搭配lambda,因为apply配lambda的作用就是把apply前面的对象里面的每一个元素都拿出来传到lambda函数里,然后告诉这个lambda函数,我要对这些元素做什么操作

# 异常值
#只处理明显异常的值
#处理步骤1、画图;2、通过计算去算三倍标准差看有没有需要处理的异常值
import seaborn
seaborn.boxplot(x = data_raw["dist_home_val"]);#识别异常值的图

seaborn.boxplot(x = data_raw["Income"]);

seaborn.boxplot(x = data_raw["Age"]);

# 筛出3倍标准差以外的值,通常只做一到两次
from scipy import stats#统计学的包
z = np.abs(stats.zscore(data_raw["Age"]))#zscore对谁标准化就把谁放进去。abs取绝对值大于3的就是异常值
(z > 3).tolist().index(1)#得到True的位置,也就是异常值的位置

data_raw["Age"].iloc[40]

#明显异常值的处理,把异常值替换为均值
data_raw["Age"].iloc[40]=data_raw["Age"].drop(index=40).mean()#把明显异常值去掉算均值,一般情况下只做一次或两次筛选异常值

# 处理哑变量get_dummies
# 为了等下的相关分析,哑变量转换后要生成新的Dataframe,不要覆盖原始数据
dummy = pd.get_dummies(data_raw["edu_class"], prefix = "edu_class").iloc[ : , 1: ]#可以进行哑变量的转换,缺陷是列名没改,prefix可以解决这个缺陷(会根据下标自动命名)。注意要删除一列,除了null那列不能删

data_drop = data_raw.drop("edu_class", axis = 1)#删除edu_class列原始数据后赋值给新的表data_drop
data = pd.concat([data_drop, dummy], axis = 1)#用pd.concat拼接两张表
data#跑回归的时候就用这个表了

相关分析

data_raw[["avg_exp", "gender", "Ownrent", "Selfempl", "edu_class"]].corr(method= "kendall")#只显示出所有分类型数据用Kendall相关系数来算

# 热力图    可视化看相关性
seaborn.heatmap(data.corr());

# 散点图scatter
import matplotlib.pyplot as plt
plt.scatter(data["avg_exp"], data["Age"]);#看是否有曲线相关性存在

# 回归
from statsmodels.formula.api import ols#ols经典线性回归,dir(ols)可以看这个包里面有什么
#~是等号
LR = "avg_exp ~ gender+Age+Income+Ownrent+Selfempl+dist_home_val+dist_avg_income+edu_class_1+edu_class_2+edu_class_3+edu_class_4"
#做的所有模型只要是用python在做,包括决策树、聚类等,只要调包做模型的时候一定是分成以下三步
model = ols(LR, data)   # 第一步:实例化  ols(做谁的回归模型, 数据集)
model = model.fit()     # 第二步:拟合数据  所有模型统一用.fit()
model.summary()         # 第三步:查看模型结果

# 查看残差
model.resid

# 共线性VIF
from statsmodels.stats.outliers_influence import variance_inflation_factor as vif
data_vif = data.iloc[:, 1:]   # 去掉因变量
data_vif["inter"] = 1         # python计算vif值的时候,需要手动添加常数列
data_vif

for i in range(0, data_vif.shape[1]):#.shape(1)返回总列数
    print(data_vif.columns[i], "\\t", vif(data_vif.values, i))#vif(数据集,前面数据集的第几列的下标序号)

#重新跑模型,不需要动原始数据,只需要把dist_avg_income从下面式子中剔除出去
LR = "avg_exp ~ gender+Age+Income+Ownrent+Selfempl+dist_home_val+edu_class_1+edu_class_2+edu_class_3+edu_class_4"

model = ols(LR, data)   # 实例化
model = model.fit()     # 拟合数据
model.summary()         # 查看模型结果
#跑完后还是要先看F检验,然后看R²,t检验

# 同方差
# 残差散点图,纵轴是残差,横轴是因变量的拟合值
plt.scatter(model.predict(data), model.resid);#没有喇叭状那些样子所以可以判断同方差没问题;.predict做预测算出拟合值,.resid算残差

# 正态性  画残差的正态概率图讨论正态性
from scipy import stats#这个包帮助我们去画残差的正态概率图
fig = plt.figure()#实例化一个模型
res = stats.probplot(model.resid, plot = plt)#数据的拟合stats.probplot(数据集, plot = plt)
plt.show()#输出模型

data["ln_avg_exp"] = np.log(data["avg_exp"])#把取过对数的y单独放进一列里

LR = "ln_avg_exp ~ gender+Age+Income+Ownrent+Selfempl+dist_home_val+edu_class_1+edu_class_2+edu_class_3+edu_class_4"

model_ln = ols(LR, data)   # 实例化
model_ln = model_ln.fit()     # 拟合数据

fig = plt.figure()
res = stats.probplot(model_ln.resid, plot = plt)
plt.show()


高次项

# 高次项
data["Age_sq"]= data["Age"] ** 2
LR = "avg_exp ~ gender+Age+Age_sq+Income+Ownrent+Selfempl+dist_home_val+edu_class_1+edu_class_2+edu_class_3+edu_class_4"

model = ols(LR, data)   # 实例化
model = model.fit()     # 拟合数据
model.summary()         # 查看模型结果

# 交互项(若只做识别,不是必须加入)   如果需要看变量(偏回归系数)的数值大小,这个时候就要考虑是否有交互项
data["AgeGender"] = data["Age"] * data["gender"]

LR = "avg_exp ~ gender+AgeGender+Age+Age_sq+Income+Ownrent+Selfempl+dist_home_val+edu_class_1+edu_class_2+edu_class_3+edu_class_4"

model = ols(LR, data)   # 实例化
model = model.fit()     # 拟合数据
model.summary()         # 查看模型结果

补充:

from sklearn.datasets import make_blobs#生成测试类数据的包
import sklearn.datasets#如果想查看,得加载整个库本身
dir(sklearn.datasets)#查看datasets这个库

X, Y = make_blobs(n_features= 2, cluster_std= 2, random_state= 991)#比如生成一个凸的数据集。
#告诉计算机我们现在要生成一个X和一个Y,n_features要生成多少维的数据,cluster_std设置标准差可以让数据更分散,random_state设置随机种子
Z = pd.DataFrame(X)
plt.scatter(Z.iloc[:, 0], Z.iloc[:, 1]);#观察散点图

不分享Excel表数据

逻辑回归算法的原理及实现(lr)

...概有两个:第一用来预测,第二寻找因变量的影响因素。逻辑回归(LogisticRegression,LR)又称为逻辑回归分析,是分类和预测算法中的一种。通过历史数据的表现对未来结果发生的概率进行预测。例如,我们可以将购买的概率设置为... 查看详情

逻辑回归算法的原理及实现(lr)

...概有两个:第一用来预测,第二寻找因变量的影响因素。逻辑回归(LogisticRegression,LR)又称为逻辑回归分析,是分类和预测算法中的一种。通过历史数据的表现对未来结果发生的概率进行预测。例如,我们可以将购买的概率设置为... 查看详情

逻辑回归lr

逻辑回归算法相信很多人都很熟悉,也算是我比较熟悉的算法之一了,毕业论文当时的项目就是用的这个算法。这个算法可能不想随机森林、SVM、神经网络、GBDT等分类算法那么复杂那么高深的样子,可是绝对不能小看这个算法... 查看详情

机器学习逻辑回归算法(代码片段)

逻辑回归算法学习目标1.逻辑回归的介绍1.1逻辑回归的应用场景1.2逻辑回归的原理1.2.1输入1.2.2激活函数1.3损失以及优化1.3.1损失1.3.2优化1.4小结2.逻辑回归api介绍3.案例:癌症分类预测-良/恶性乳腺癌肿瘤预测3.1背景介绍3.... 查看详情

lr-逻辑回归

因为逻辑回归对于计算广告学非常重要。也是我们平时广告推荐、CTR预估最常用到的算法。所以单独开一篇文章讨论。 参考这篇文章:http://www.cnblogs.com/sparkwen/p/3441197.html 逻辑回归其实仅为在线性回归的基础上,套用了... 查看详情

逻辑回归算法实现_基于r语言(代码片段)

逻辑回归(LogisticRegression)模型和线性回归非常相似,可以说就是在逻辑回归的基础上加上了一步逻辑转换,也就是因为这个转换,使逻辑回归模型非常适用于二分类问题的概率预测。本文主要详述逻辑回归模型的基础以及逻辑回... 查看详情

机器学习分类算法之逻辑回归(代码片段)

一、概念逻辑回归(LogisticRegression,LR)是一种广义的线性回归分析模型,属于监督学习算法,需要打标数据,可以用在回归、二分类和多分类等问题上,最常用的是二分类。线性回归就是通过一条曲线区分不同的数据集,在二分类问... 查看详情

机器学习--逻辑回归的原理与基础实现(代码片段)

文章目录概述一、逻辑回归二、小案例总结概述逻辑回归(LogisticRegression,简称LR),其实是一个很有误导性的概念,虽然它的名字中带有“回归”两个字,但是它最擅长处理的却是分类问题。LR分类器适用于各项广义上... 查看详情

推荐系统的常用算法----算法岗面试题(代码片段)

...基于模型的协同过滤推荐、基于关联规则的推荐FM:LR:逻辑回归本质上是线性回归,只是在特征到结果的映射中加入了一层逻辑函数g(z),即先把特征线性求和,然后使用函数g(z)作为假设函数来预测。g(z)可以将连续值映射到0和1... 查看详情

机器学习算法(代码片段)

...器学习常用算法一、线性回归1.基本概念2.代码实现二、逻辑回归1.基本概念Sigmoid预测函数2.代码实现三决策树1.基本概念2.代码实现四支持向量机(SVM)1.基本概念2.代码实现五全连接神经网络DNN1.基本概念全连接神经网络... 查看详情

机器学习—逻辑回归与svm区别

...VM有什么不同点  (1)本质上是其lossfunction不同;  逻辑回归损失函数:    SVM损失函数:    LR方法基于概率理论,假设样本为0或者1的概率可以用sigmoid函数来表示,然后 查看详情

lr(逻辑回归)

...函数,即:h(x)=w0+w1x1+w2x2+...+wnxn写成向量形式为:h(x)=wTx逻辑回归是一种分类算法,本质上是线性回归,它通过引入对数几率函数将线性回归得到的连续值映射到0~1之间,从而可以用在分类问题上逻辑回归的预测函数为:对于任... 查看详情

逻辑回归|机器学习|分类算法(代码片段)

目录1.逻辑回归1.1逻辑回归原理1.2sigmoid函数2.相关代码2.1LogisticsRegression类2.2求解代码2.3输出结果3.直接调库使用1.逻辑回归1.1逻辑回归原理∙\\bullet∙逻辑回归又叫对数几率回归,是一种对数几率模型,可以求解二分类问... 查看详情

破解数据匮乏现状:纵向联邦学习场景下的逻辑回归(lr)

...华为云可信智能计算服务(TICS)采用的纵向联邦逻辑回归(LR)方案。本文分享自华为云社区《纵向联邦学习场景下的逻辑回归(LR)》,作者:汽水要加冰。海量训练数据是人工智能技术在各个领... 查看详情

分类算法-逻辑回归与二分类(代码片段)

分类算法-逻辑回归与二分类1、逻辑回归的应用场景广告点击率是否为垃圾邮件是否患病金融诈骗虚假账号看到上面的例子,我们可以发现其中的特点,那就是都属于两个类别之间的判断。逻辑回归就是解决二分类问题的利器2、... 查看详情

机器学习实战之logistic回归

...ssion    1.1线性回归    1.2Sigmoid函数    1.3逻辑回归    1.4LR与线性回归的区别  2.LR的损失函数  3.LR正则化    3.1L1正则化    3.2L2正则化    3.3L1正则化和L2正则化的区别  4.RL损失函数求... 查看详情

逻辑回归算法(代码片段)

1、逻辑回归理论逻辑回归也被称为广义线性回归模型,它与线性回归模型的形式基本上相同,都具有theta*xb,其中theta是待求参数,其区别在于他们的因变量不同,多重线性回归直接将theta*xb作为因变量,... 查看详情

logistic回归分类算法原理分析与代码实现

小结      1.逻辑回归的计算代价不高,是很常用的分类算法。集中基于随机梯度上升的逻辑回归分类器能够支持在线学习。      2.但逻辑回归算法缺点很明显-一般只能解决两个类的分... 查看详情