IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> python线性回归分析练手:用大众点评500家的评分数据拟合线性回归 -> 正文阅读

[人工智能]python线性回归分析练手:用大众点评500家的评分数据拟合线性回归

python线性回归分析

大家好!我是未来村村长!就是那个“请你跟我这样做,我就跟你那样做!”的村长👨?🌾!

一、简单说明

1、数据源

请添加图片描述

2、探究目的

我们通过线性回归方法,探究’评论人数’,‘人均价格’,‘口味’,‘环境’,'服务’与’评论分数’的相关关系,得出对应的线性回归方程,并探究回归模型的拟合程度

3、所使用的库

#coding=gbk
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import  train_test_split
from sklearn.linear_model import  LinearRegression
from scipy import stats

二、数据预处理

由于数据无缺失值和重复值,我们不需要进行对异常值的处理,我们只需要清洗以下,将字符数据转换为数值型数据即可。

df_allinfo = pd.read_csv(r'C:\Users\官二的磊子\Desktop\总体信息.csv', header=0, names=['店铺名称', '评论分数', '评论人数', '人均价格', '口味', '环境', '服务'],encoding='gbk')
#数据预处理
for i in range(len(df_allinfo['店铺名称'])):
    df_allinfo.loc[i, '口味'] = df_allinfo['口味'][i].replace('口味:', '')
    df_allinfo.loc[i, '评论人数'] = df_allinfo['评论人数'][i].replace('条评价', '')
    df_allinfo.loc[i, '人均价格'] = df_allinfo['人均价格'][i].replace('人均:', '')
    df_allinfo.loc[i, '人均价格'] = df_allinfo['人均价格'][i].replace('元', '')
    df_allinfo.loc[i, '环境'] = df_allinfo['环境'][i].replace('环境:', '')
    df_allinfo.loc[i, '服务'] = df_allinfo['服务'][i].replace('服务:', '')
df_allinfo[['评论分数', '评论人数', '人均价格', '口味', '环境', '服务']]=df_allinfo[['评论分数', '评论人数', '人均价格', '口味', '环境', '服务']].astype('float64')

#数据字段总体描述
df_describe = df_allinfo.describe().T
print(df_describe)

三、绘制散点图和关系热力图

我们为了初步查看其相关数据的相关关系,可以画出散点图和关系热力图

#绘制散点图
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号
#定义绘制函数
def drawing(x,y,xlabel):
    plt.scatter(x,y)
    plt.title('%s与评论分数的散点图' %xlabel)
    plt.xlabel(xlabel)
    plt.ylabel('评论分数')
    plt.grid()
    plt.show()
#绘制
drawing(df_allinfo['评论人数'],df_allinfo['评论分数'],'评论人数')
drawing(df_allinfo['口味'],df_allinfo['评论分数'],'口味')
drawing(df_allinfo['环境'],df_allinfo['评论分数'],'环境')
drawing(df_allinfo['服务'],df_allinfo['评论分数'],'服务')
drawing(df_allinfo['人均价格'],df_allinfo['评论分数'],'人均价格')

#关系热力图
corr = df_allinfo.loc[:,['评论分数','评论人数','人均价格','口味','环境','服务']].corr()
print(corr)
sns.heatmap(corr,linewidths=0.1,vmax=1.0, square=True,linecolor='white', annot=True)
plt.show()

散点图示例:

请添加图片描述

关系热力图示例:

请添加图片描述

矩形块内的数值为对应的相关系数corr

四、模型建立

我们先将数据随机二八分配,其中80%作为训练数据,20%作为测试数据

#定义变量
X = pd.DataFrame(np.c_[df_allinfo['人均价格'],df_allinfo['评论人数'],
                 df_allinfo['口味'],df_allinfo['环境'],df_allinfo['服务']],
                 columns = ['人均价格','评论人数','口味','环境','服务'])
Y = df_allinfo['评论分数']
#数据集分割:80%训练,20%测试
X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size=0.2,random_state=5)
print(X_train.shape,X_test.shape,Y_train.shape,Y_test.shape)

然后调用相应的函数进行模型的拟合

#模型拟合
model = LinearRegression()
model.fit(X_train,Y_train)

通过训练函数拟合后,我们查看得到的结果

#模型参数输出
#截距
print(model.intercept_)
#估计系数
coeffcients = pd.DataFrame([X_train.columns,model.coef_]).T
coeffcients = coeffcients.rename(columns={0:'Attribute',1:'Coefficients'})
print(coeffcients)

请添加图片描述

得到结果后,我们用测试数据去验证拟合的效果,测试拟合效果的方法为两种,一是画测试数据的散点图,查看有无离群点。二是算出R方,R方越接近1,说明方程拟合度越高。

#绘制预测值与实际值的散点图
price_pred = model.predict(X_test)
plt.scatter(Y_test,price_pred)
plt.xlabel("Actual Prices")
plt.ylabel("Predicted prices")
plt.title("Actual price vs Predicted prices")
plt.show()
#R的二次方越接近1说明模型拟合得越合适
print('R-Squared: %.4f' % model.score(X_test,Y_test))

请添加图片描述

请添加图片描述

综上拟合度已经很高了,说明得到的方程可信。如果R方过低,则可能是数据集不够或者出现了离群值,做出调整后进行重新拟合。

五、结论

我们可以得出方程:评论分数 = 0.60x口味 + 0.01x环境 + 0.27x服务(评论人数和价格影响过小而省略)

所以餐饮行业要想店铺评论高,顾客口碑好。还是得好好搞好味道,其次是服务态度。哪怕你是苍蝇馆还是米其林,味道不好服务差,迟早都得倒闭。

(以上只是练手,所有结论皆不严谨)

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-11-10 12:23:57  更:2021-11-10 12:24:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 6:13:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码