Dummies的线性回归

如果您正在开始您的数据科学或机器学习之旅,线性回归可能是您可能正在学习的第一个机器学习算法或统计模型。它可能是机器学习和统计学中最简单和最著名的算法之一。在这里,我们将直观地探索简单的线性回归及其关键思想以及伪代码和 python 实现。

在开始线性回归或任何类型的回归之前,了解回归建模的概念至关重要。在统计领域,回归建模是一种用于制定 因变量和一组自变量之间的数学关系的方法。例如,您想估计某些人的体重,这受他们的饮食、身高和运动习惯的影响。这里,权重是因变量(结果),其余三个是自变量(预测变量)

线性回归是一种统计算法吗?

机器学习的目标,更具体地说是预测建模,是通过在略读可解释性的同时做出最佳预测来最小化错误。在应用机器学习中,我们利用来自各个领域(主要是统计数据)的算法来实现这些目的。因此,线性回归起源于统计学领域,目的是为了理解输入和输出数值变量之间的关系,但工程学已将其借用于机器学习。因此,除了是一种统计算法之外,它还是一种机器学习算法。现在,让我们了解它的全部内容。

定义线性回归

线性回归是一种强大的监督机器学习算法,它假设因变量和自变量之间存在线性关系。它只是寻找最佳拟合线的处理器,它最准确地解释了依赖特征和独立特征之间的可变性。让我们假设线性回归是一台自动售货机,它接受一个输入变量(预测变量)x并返回一个输出变量(结果)y。如果只有一个输入变量或特征,我们称之为简单线性回归,如果有多个输入变量,我们称之为多元线性回归。有许多方程式可以表示一条直线,但我们将坚持使用以下方程式:

这里 βo 是 y 截距,β1 是斜率。让我们尝试借助图表来理解它。

在上图中:

  • x 轴绘制我们的自变量x,y 轴绘制我们的因变量y
  • 数据点(实际值)在这里用灰点表示
  • βo 是 10 的截距,β1 是 x 变量的斜率。
  • 根据我们的模型,蓝线是最佳拟合线,对应于预测值
  • 误差或残差衡量数据点与回归线的距离,即它只是与我们的模型的偏差

正如我们从理论中知道的那样,线性回归方程包含两个系数,即βo 是截距,β1 是斜率。为了得到最佳拟合线,我们必须计算这些系数,下面会提到这个算法。

简单线性回归的伪代码

1. Start

2. Read Number of Data (n)

3. For i=1 to n:
     Read Xi and Yi
   Next i

4. Initialize:
     sumX = 0
     sumX2 = 0
     sumY = 0
     sumXY = 0

5. Calculate Required Sum
   For i=1 to n:
     sumX = sumX + Xi
     sumX2 = sumX2 + Xi * Xi
     sumY = sumY + Yi
     sumXY = sumXY + Xi * Yi
   Next i

6. Calculate Required Constant a and b of y = a + bx:
   b = (n * sumXY - sumX * sumY)/(n*sumX2 - sumX * sumX)
   a = (sumY - b*sumX)/n

7. Stop

使用 Python 实践线性回归算法

了解了理论之后,让我们学习如何在实践中使用 python 来做到这一点。Python 的优势在于我们不必从头开始实现流行的机器学习算法。从机器学习到数据可视化,都有 Python 库,拥有非常活跃的开发者社区。我们将使用 Scikit Learn 库来开发我们的线性回归模型。

SciKit 学习库的一个重要功能是它包含玩具数据集,使新用户在解决更复杂的问题之前可以轻松练习。我们将使用糖尿病数据集来演示线性回归模型。

第 1 步:导入库

我们将从导入相关库开始,其中一些非常重要的是:

  • NumPy(执行某些数学运算)
  • pandas(将数据存储在 pandas DataFrames 中)
  • matplotlib.pyplot(我们将使用 matplotlib 与 seaborn 一起绘制数据)
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score

第 2 步:加载数据集

我们的下一步是将数据导入 DataFrame。DataFrame 是 python 中的一个对象,它将帮助我们以表格格式组织数据。现在让我们从 sklearn 的糖尿病数据集中加载数据并创建我们的数据框。

# Load the diabetes dataset
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)

# Create dataframe and add column names
features = pd.DataFrame(diabetes_X, columns=["age","sex","bmi","bp", "tc", "ldl", "hdl","tch", "ltg", "glu"])
target = pd.DataFrame(diabetes_y, columns=["disease_progression"])
df = pd.merge(features,target, left_index=True, right_index=True)

第 3 步:可视化

现在让我们为所有变量绘制一个热图,以便在我们的数据集中找到一些相关性以获得直觉。

correlation_matrix = df.corr()
f, ax = plt.subplots(figsize=(12, 9))
sns.heatmap(correlation_matrix, vmax=.8, square=True);

从热图中我们可以看出,与其他变量相比,年龄和疾病进展具有更高的相关性。您可以继续使用可视化,并可以从数据中找到有趣的见解。

第 4 步:执行简单的线性回归

首先,我们需要将数据集拆分为训练和测试数据集。我们将使用训练数据集训练我们的模型,然后使用测试数据集验证我们的模型。

# Split into validation and training data
diabetes_X_train, diabetes_X_test, diabetes_y_train, diabetes_y_test = train_test_split(features, target, test_size=0.1, random_state=1)

现在我们有了训练和测试数据集,我们将使用 sklearn 的 linear_model 创建一个 LinearRegression 对象,并使用训练数据集训练我们的模型。

# Create linear regression object
regr = linear_model.LinearRegression()

# Train the model using the training sets
regr.fit(diabetes_X_train, diabetes_y_train)

在我们的模型经过训练后,我们将通过针对测试数据集对其进行验证来评估我们的模型,如下所示

# Make predictions using the testing set
diabetes_y_pred = regr.predict(diabetes_X_test)

# The coefficients
print("Coefficients: \n", regr.coef_)
# The mean squared error
print("Mean squared error: %.2f" % mean_squared_error(diabetes_y_test, diabetes_y_pred))
# The coefficient of determination: 1 is perfect prediction
print("Coefficient of determination: %.2f" % r2_score(diabetes_y_test, diabetes_y_pred))

在上面的示例中,均方误差衡量回归线与一组数据点的接近程度,即观察到的数据点与预测值的接近程度。均方误差是通过取与函数相关的数据平方误差的平均值,特别是平均值来计算的。在数学上它可以表示为,

均方误差和r2 分数密切相关,但并不完全相同。它可以定义为“(模型解释的总方差)/总方差”。R平方比MSE更好。因为均方误差的值取决于变量的单位(即它不是标准化的量度),它可以随着变量单位的变化而变化。

结论

在介绍了线性回归和机器学习的最基本概念之后,是时候拿起一个数据集并将您的学习付诸实践了。

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

推荐阅读更多精彩内容