【问题标题】:Understanding multiple Linear regression了解多元线性回归
【发布时间】:2019-07-04 14:26:43
【问题描述】:

我正在做多元回归问题。我有以下数据集如下。

rank--discipline--yrs.since.phd--yrs.service--sex--salary
[  1           1             19           18    1  139750],......

我将薪水作为因变量,将其他变量作为自变量。在做了数据预处理之后,我运行了梯度下降,回归模型。我估计了所有独立特征的偏差(截距)系数。 我想为实际值和回归线做散点图 对于我预测的假设。由于我们这里有不止一个功能,

我有以下问题。

  1. 在绘制实际值(散点图)时,如何确定 x 轴值。意思是,我有价值观列表。例如,第一行 [1,1,19,18,1]=>139750 如何将 [1,1,19,18,1] 转换或映射到 x 轴。?我需要以某种方式将 [1,1,19,18,1] 设为一个值,因此我可以在图中标记 (x,y) 的一个点。

  2. 在绘制回归线时,特征值是什么,所以我可以计算假设值。? 现在的意思是,我有所有特征的截距和权重,但我没有特征值。我现在如何决定特征值?

我想计算积分并使用 matplot 来完成工作。我知道有很多工具可以在外面使用,包括 matplotlib 来完成这项工作。但我想得到基本的了解。

谢谢。

【问题讨论】:

  • 如果数据集中有多个目标,最好的方法是分别绘制每个目标,即每个图中只有一个目标。至于你的问题1,数据是存储为numpy数组还是pandas DataFrame?来到问题 2,你能解释一下你想在哪里绘制它。只有两个变量吗?您是否已经有了系数和截距,最重要的是,您能否在输入数据库上发布 df.describe() 的结果。另外,如果可能,请尝试重新构建您的第二个问题,因为我仍然对此感到有些困惑。
  • 嗨,我的数据集中只有一个目标(薪水)和 5 个特征(等级、纪律等)。我正在为 df 使用熊猫。我对 point1 的查询是,假设第一个数据实例是 [1,1,19,18,1],目标值为 139750。如何在 x,y 轴上绘制这些值。由于 x 轴有多个值,我该如何转换它。?第二个问题的查询是,假设 [1,2,3,4,5,6] 是我为这个数据集到达的截距和系数。截距=1,其余是特征的权重。公式为 h(x)=1+2X1+3X2+4X3+5X4+6X5。 X1、X2...X5 的值是多少?
  • 不是编程问题,更适合Cross Validated

标签: machine-learning regression linear-regression


【解决方案1】:

我仍然不确定我是否完全理解你的问题,所以如果有什么不是你所期望的,我们会在下面的评论中解决。

现在,

查询 1:在所有数据集中,您将有多个输入,并且在您的情况下无法查看目标变量 salary,在单个图表中,通常所做的要么是您使用t-sne (link) 对数据应用降维概念,或者使用主成分分析(PCA) 来降低数据的维度,并使输出成为两个或三个变量的函数,然后将其绘制出来在屏幕上,我更喜欢的另一种技术是将target 与每个变量分别绘制为subplot,原因是我们甚至没有办法理解我们将如何看到更多的数据超过三个维度。

疑问2:如果你没有下定决心使用matplotlib,我会建议seaborn.regplot(),不过我们也用matplotlib吧。假设您首先要使用的变量是“discipline”与“salary”。

from sklearn.linear_model import LinearRegression
lm = LinearRegression()
X = df[['discipline']]
Y = df['salary']
lm.fit(X,Y)

运行此lm.coef_ 后将给您系数,lm.intercept_ 将在形成此变量的线性方程中为您提供截距,然后您可以使用 matplotlib 轻松绘制两个变量和一条线之间的数据。

【讨论】:

    【解决方案2】:

    你能做的是->

    from pandas import plotting as pdplt
    
    pdplt.scatter_matrix(dataframe, pass the remaining required parameters)
    

    通过这个,您将获得一个图表矩阵(在您的情况下为 6X6),它将准确显示数据框中的每一列与其他列的关系,并且您可以清楚地可视化哪个特征主导结果以及特征如何相互关联。 如果你问我,这是我用来处理此类问题的第一件事,然后删除所有相关特征并选择最接近输出的特征。

    但是由于您必须绘制二维图,并且在上述方法中,您可能会获得多个主导输出的单一特征,那么您可以做的是一个名为 PCA 的奇迹。 如果你问我,PCA 是机器学习中最美妙的事情之一。它将以某种方式以某种神奇的比率合并您的所有功能,从而为您的数据生成主要组件。主要组件是那些管理/主要贡献于您的模型的组件。您只需从 sklearn 导入即可应用 pca,然后选择第一个主成分(因为您需要 2d 图)或者可能选择 2 个主成分并绘制 3d 图。但请始终记住,这些主要组件不是模型的真正特征,而是一些神奇的组合,PCA 是如何做到这一点的非常有趣(通过使用特征值和向量等概念),您也可以自己构建。

    除此之外,您还可以将奇异值分解 (SVD) 应用于您的模型,这是整个线性代数的本质,它是一种适用于所有矩阵的矩阵分解。这样做是将您的矩阵分解为三个矩阵,其中对角矩阵由降序的奇异值(比例因子)组成,您要做的是选择顶部奇异值(在您的情况下只有第一个具有最高幅度)并构造一个从 5 列到 1 列的特征矩阵,然后绘制它。你可以使用 numpy.linalg 来做 svd

    一旦你应用了这些方法中的任何一种,你可以做的就是只用一个最重要的选定特征来学习你的假设,最后绘制图表。但是请注意,仅在绘制 2d 图时,您应该避免使用其他重要特征,因为您可能有 3 个主成分,它们的贡献几乎相同,并且前三个奇异值可能彼此非常接近。所以请听我的话并考虑所有重要特征,如果您需要这些重要特征的可视化,请使用散点矩阵

    总结 ->

    我想说的是,您可以对所有这些事情执行相同的过程,还可以发明自己的统计或数学模型来压缩您的特征空间。 但对我来说,我更喜欢使用 PCA,在此类问题中,我什至首先绘制散点矩阵以获得对数据的直观直觉。而且 PCA 和 SVD 也有助于消除冗余,从而消除过度拟合。

    其他详细信息请参阅文档。

    机器学习愉快...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      • 2013-07-17
      • 2014-05-20
      • 1970-01-01
      • 2016-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多