首页 > 编程知识 正文

聚类分析线性回归分析与分类分析逻辑回归模型的区别,分类聚类关联规则回归分析

时间:2023-05-05 13:55:09 阅读:262119 作者:2949

文章目录 前言一、了解数据概况二、单变量分析三、可视化四、建立模型1.线性回归模型①导库、读取数据②了解数据概况且对后续建模进行数据处理③建立线性回归模型 2.逻辑回归模型①统计预测目标结果(流失)中的0和1比例②观察导致目标结果(高流失率)是哪些变量③逻辑回归模型建立与优化④模型解读 3.聚类分析模型①数据处理②聚类分析模型建立 总结


前言

借线性回归模型、逻辑回归模型、聚类分析模型做数据分析的入门,机器学习包括两类学习,线性回归与逻辑回归为监督式学习,聚类分析为非监督学习;其中用到的几个库:pandas为数据分析工具集用以数据清洗、MatplotlibSeaborn为可视化库、sklearn为机器学习第三方模块,封装了多种机器学习方法方便取用


一、了解数据概况

前提:新建DataFrame命名为store

store.info() — 读取数据
index_col=0 — 第一列就是index值,不用新增一列unnamed;
(index_col=none/false — 重新设置一列为成为index值)
用法:store=pd.read_csv(‘w2_store_rev.csv’,index_col=0)

store.isnull().sum() — .isnull()判断数据集store每一列是否是空,是的话标1,不是的话标0;.sum()最后加总
store.describe() — 了解数据分布、大小情况;

二、单变量分析

前提:导入数据分析处理的核心库
import pandas as pd;

store.event.unique() / store[‘event’].unique()— 数据来源.变量名.unique()以数组形式返回该列所有唯一值;
store.groupby([‘event’])[‘revenue’].describe() — 将收入按事件分类统计;
store=pd.get_dummies(store) — 对store中所有类别变量进行量化,值存在为1,否则0;
store=pd.get_dummies(store[‘event’]) — 只对event变量进行量化;
store.corr() — 查看所有变量之间的相关性;
store.corr()[[‘revenue’]].sort_value(‘revenue’,ascending=False) — 查看所有变量与‘revenue’变量的相关性(注意revenue的为双中括号,否则变成series),sort_values()根据某一字段做升降序排列,不加ascending则默认升序,ascending=False为降序;

三、可视化

前提:导入可视化库
import seaborn as sns;
import matplotlib.pyplot as plt
%matplotlib inline;

sns.regplot(‘local_tv’,‘revenue’,store) — sns.regplot(字段1:自变量,字段2:因变量,数据),对自变量进行线性关系可视化分析,生成散点图以及一条线性回归的拟合参考线;

四、建立模型 1.线性回归模型

案例:宝洁销售额预测

①导库、读取数据

代码如下(示例):

import pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsstore = pd.read_csv('w2_store_rev.csv',index_col=0) ②了解数据概况且对后续建模进行数据处理

代码如下(示例):

store = pd.get_dummies(store['event']) #类别变量转为数值型变量(哑变量)store.drop(['local_tv_no','person_no'],axis=1,inplace=True) #删除不需要的哑变量,axis=1表示跨列,axis=0表示跨行,inplace=true表示对原始对象进行修改,不创建新对象,inplace=false表示创建新对象承载结果;store.isnull().sum() #统计数据空值store = store.fillna(0) / store = store.fillna(store.local_tv.mean()) #缺失值用0或均值填补;缺失数量在5%左右可直接填充store.columns = store.columns.str.lower() #统一字段的大小写方便书写不出错误,columns表示列变量名,str.lower()表示大写转小写,str.upper()表示小写转大写store = store.rename(columns={'churn_yes':'flag'}) #变量重命名 ③建立线性回归模型

代码如下(示例):

from sklearn.linear_model import LinearRegression #从skleaen库的linear_model线性模型库中导入LinearRegressionmodel=LinearRegression() #设置模型为线性回归y = store['revenue']x = store[['local_tv','person','instore']] #设置自变量和因变量model.fit(x,y) #训练模型score = model.score(x,y) #x和y打分predictions = model.predict(x) #计算y预测值error = predictions-y #计算误差rmse = (error**2).mean()**.5 #计算rmse(均方根误差)mae = abs(error).mean() #计算mae(平均绝对误差)print(rmse) #值越小误差越小print(mae) 2.逻辑回归模型

案例:消费者行为预测:客户流失预测

①统计预测目标结果(流失)中的0和1比例

代码如下(示例):

churn.flag.value_counts()/churn.flag.value_counts(1) #统计流失中的0和1数量/比例,一般样本0和1分布比例不能有太大偏差,1不能低于5% ②观察导致目标结果(高流失率)是哪些变量

代码如下(示例):

#新建DataFrame为summary,将其他变量值以flag为依据进行分类统计,取均值,得知导致高流失率的变量summary=churn.groupby('flag')summary.mean()#可视化展示不同变量与流失率的关系sns.countplot(y='contact_month',hue='flag',data=churn) #y为需要查看的变量,hue=flag将数据按照0/1分组,data=churn为数据来源#相关性分析churn.corr()[['flag']].sort_values('flag',ascending=False) ③逻辑回归模型建立与优化

代码如下(示例):

#设定x和y变量y = churn['flag']x = churn[['contact_month','internet_other','streamingtv']]#加载数据切分工具包from sklearn.model_selection import train_test_split#切分训练集和测试集x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=100)#建模并拟合模型from sklearn.linear_model import LogisticRegressionIr=LogisticRegression()Ir.fit(x_train,y_train)#模型系数解读:查看模型截距和系数Ir.intercept_Ir.coef_#基于模型的结果,对训练集与测试集中X的真实值预测对应的Yy_pred_train=Ir.predict(x_train)y_pred_test=Ir.predict(x_test)#模型评估#搭建训练集混淆矩阵import sklearn.metrics as metricsmetrics.confusion_matrix(y_train,y_pred_train)#计算训练集准确率metrics.accuracy_score(y_train,y_pred_train)#搭建测试集混淆矩阵metrics.confusion_matrix(y_test,y_pred_test)#计算测试集准确率metrics.accuracy_score(y_test,y_pred_test)#模型优化改变test_size/选取其他相关性更强X变量 ④模型解读

不同于线性回归模型系数直接反映X对Y的增加和减少,逻辑回归模型的系数表达的是一种概率的概念;
例,p表示目标为1的概率,1-p表示目标为0的概率,当系数为2时:

log(p/1-p)=2
即p/1-p=exp(2)=7.39
对应该变量下事件发生是不发生的7.39倍;

3.聚类分析模型 ①数据处理

代码如下(示例):

#年龄变量异常值处理:把年龄限制在18-80airbnb=airbnb[airbnb['age']<=80]airbnb=airbnb[airbnb['age']>=18]#变量'date_account_created',to_datetime转变为日期格式airbnb['date_account_created']=pd.to_datetime(airbnb['date_account_created']) airbnb['year_since_account_created']=airbnb['date_account_created'].apply(lambda x:2019-x.year) #生成衍生变量,".year"将年份提取出来,apply(lambda)-应用lambda所阐述的规则#删除前面生成的日期变量,可以根据数据格式进行dropairbnb.drop(airbnb.select_dtypes(['datetime64']),inplace=True,axis=1)#类别变量转为哑变量airbnb=pd.get_dummies(airbnb)

lambda为匿名函数,即没有具体名称的函数,它允许快速定义单行函数,可以用在任何需要函数的地方;
lambda原型为:lambda 参数:操作(参数)
lambda表达式“ : ”后面,只能有一个表达式

②聚类分析模型建立

代码如下(示例):

#选择用于聚类分析的变量并标准化airbnb_5=airbnb[['age','web','moweb','ios','android']]#使用sklearn中的preprocessing将数据标准化并存入x变量:调用preprocessing库,scale()实现标准化并存入x变量中from sklearn.preprocessing import scalex=pd.DataFrame(scale(airbnb_5))#使用sklearn模块的cluster建立模型,尝试分为3类并拟合模型from sklearn import clustermodel=cluster.KMeans(n_clusters=3,random_stata=10)model.fit(x)#从模型中提取簇标签存入labels这个数组中查看前20行分类情况airbnb_5['cluster']=model.labels_airbnb_5.head(20)#查看分群效果是否明显airbnb_5.groupby(['cluster'])['age'].describe()airbnb_5.groupby(['cluster'])['ios'].describe()#模型评估:计算轮廓系数,评分越高,个体与群距离越近from sklearn import metricsx_cluster=model.fit_predict(x) #计算个体与群的距离score=metrics.silhouette_score(x,x_cluster)print(score)#模型优化哪个变量的分群效果弱即将其调整为其他变量进行模型拟合/调整分群数#业务解读:导出结果到文件进行centers=pd.DataFrame(model.cluster_center_)centers.to_csv('center_3.csv')人群在某个特征变量上数据的绝对值越大,说明这个人群在这个特征上有较明显的区分度。 总结 本文借三个案例,简单介绍了pandas的部分使用、可能遇到的数据处理方法以及模型的建立解读。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。