案例:使用线性回归预测葡萄酒质量

这也是一个经典的描述性统计与建模的小案例了,主要用到pandas进行数据处理,用statsmodels进行统计建模。

数据来源:

红葡萄酒(http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv
白葡萄酒(http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-white.csv
将这两个数据表合并成为一个新的数据集wine,然后统一处理,代码如下:

import numpy as np
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import statsmodels.api as sm
import statsmodels.formula.api as smf
from statsmodels.formula.api import ols, glm

合并文件

filepath1 = 'C:/Users/Carman/Downloads/winequality-red.csv'
filepath2 = 'C:/Users/Carman/Downloads/winequality-white.csv'
red = pd.read_csv(filepath1,sep = ';')
white = pd.read_csv(filepath2,sep = ';')
red['type'] = 'red'   # 新增type一栏用于之后进行不同葡萄酒的品种对比
white['type'] = 'white'
wine = red.append(white).reset_index(drop = True)
wine.columns = wine.columns.str.replace(' ','_')

按照葡萄酒类型显示质量的描述性统计

wine.groupby('type')['quality'].describe().unstack('type')
image.png

用seaborn画一下两种类型葡萄酒评分分布的密度直方图,从统计图可以看出,两种葡萄酒的评分都近似正态分布。

sns.set_style("dark")
sns.distplot(red_wine,norm_hist=True, kde=False, color="red", label="Red wine")
sns.distplot(white_wine,norm_hist=True, kde=False, color="white", label="White wine")
plt.title("Distribution of Quality by Wine Type")
plt.legend()
plt.show()
image.png

然后可以用t检验判断红葡萄酒和白葡萄酒的平均评分是否有区别。
ps:t检验是用于小样本的两个平均值差异程度的检验方法。它是用T分布理论来推断差异发生的概率,从而判定两个平均数的差异是否显著。(上学期看的统计学的书又忘光了~~)

# 检验红葡萄酒和白葡萄酒的平均质量是否有所不同
print(wine.groupby(['type'])[['quality']].std())
tstat, pvalue, df = sm.stats.ttest_ind(white_wine,red_wine)
print('\ntstat: %.3f pvalue: %.4f' % (tstat, pvalue))
image.png

t 检验统计量为 9.69,p 值为 0.00,这说明白葡萄酒的平均质量评分在统计意义上大于红葡萄酒的平均质量评分。

成对变量之间的关系和相关性

##计算所有变量的相关矩阵
print(wine.corr())

corr 函数可以计算出数据集中所有变量两两之间的线性相关性。根据相关系数的符号,从输出中可以知道酒精含量、硫酸盐、pH 值、游离二氧化硫和柠檬酸这些指标与质量是正相关的,相反,非挥发性酸、挥发性酸、残余糖分、氯化物、总二氧化硫和密度这些指标与质量是负相关的。

用statsmodel 包来进行线性回归

my_formula = 'quality~alcohol + chlorides + citric_acid + density\
+ fixed_acidity + free_sulfur_dioxide + pH + residual_sugar + sulphates\
+ total_sulfur_dioxide + volatile_acidity'
lm = ols(my_formula, data=wine).fit()

第一行代码将一个字符串赋给变量 my_foumula,有点R 语言语法的回归公式定义。波浪线左侧的变量 quality 是因变量,波浪线右侧的变量是自变量。
输出看一下结果:

print(lm.summary())

打印出了模型结果的摘要信息,包括模型系数、系数的标准差和置信区间、修正 R 方、F 统计量等等信息。

做预测

对数据进行线性回归的建模之后就可以根据给出的自变量特征值做预测了,这里方便起见我们随机选取一些已经拟合过的数据

new_observations = wine.sample(20)
new_observations=new_observations[new_observations.columns.difference(['quality', 'type'])]
y_test = new_observations1.quality
# 基于新观测中的葡萄酒特性预测质量评分
y_predicted = lm.predict(new_observations1)
# 将预测值保留两位小数并打印到屏幕上
y_predicted_rounded = [round(score, 2) for score in y_predicted]
print(y_predicted_rounded)

对于准确性的检验本来想用 accuracy_score,但是可能因为预测的quality有小数位数的原因报错,将小数四舍五入成整数之后倒是可以用,不过最终结果只有0.4。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,968评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,682评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,254评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,074评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,964评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,055评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,484评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,170评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,433评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,512评论 2 308
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,296评论 1 325
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,184评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,545评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,150评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,437评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,630评论 2 335

推荐阅读更多精彩内容