使用Python(Pandas和Numpy)进行线性回归

4
我会尽力帮助您进行翻译。以下是需要翻译的内容:

我正在尝试使用Python实现线性回归。

我完成了以下步骤:

import pandas as p
import numpy as n
data = p.read_csv("...path\Housing.csv", usecols=[1]) # I want the first col
data1 = p.read_csv("...path\Housing.csv", usecols=[3]) # I want the 3rd col
x = data
y = data1

然后我尝试获取系数,并使用以下内容:

regression_coeff = n.polyfit(x,y,1)

然后我得到以下错误:
raise TypeError("expected 1D vector for x")
TypeError: expected 1D vector for x

我无法理解这个问题,因为当我打印 xy 时,很清楚地看到它们都是一维向量。

有人可以帮忙吗?

数据集可以在这里找到:DataSets

原始代码如下:

import pandas as p
import numpy as n

data = pd.read_csv('...\housing.csv', usecols = [1])
data1 = pd.read_csv('...\housing.csv', usecols = [3])

x = data
y = data1
regression = n.polyfit(x, y, 1)

2
没有 请使用以下内容: - Mike Müller
2
您可能忘记粘贴您的代码了。 - Mike Müller
3
抱歉,无法帮助调试我看不到的代码。 - Mike Müller
@Jeet1994看看你的帖子。你说“使用以下内容:然后我得到以下错误”。在“以下内容:”和“然后我得到”之间缺少代码。如果你希望有人帮助,复制并粘贴那段代码。 - Wayne Werner
@JohnE 我编辑了问题。抱歉 :) - Pragyaditya Das
显示剩余6条评论
3个回答

6
这应该可以工作:
np.polyfit(data.values.flatten(), data1.values.flatten(), 1)

data是一个数据帧,其值为二维的:

>>> data.values.shape
(546, 1)

flatten() 将其转换为1D数组:

>> data.values.flatten().shape
(546,)

这是polyfit()所需要的。

更简单的替代方法:

df = pd.read_csv("Housing.csv")
np.polyfit(df['price'], df['bedrooms'], 1)

非常感谢Mike :) 它完美地运行了。您能否解释一下为什么添加flatten()后它可以工作,它实际上做了什么? - Pragyaditya Das
1
添加了一些解释。 - Mike Müller

2

Python告诉你数据格式不正确,特别是x必须是一个1D数组,在你的情况下它是一个2D-ish的panda数组。 你可以将数据转换为numpy数组并压缩它以解决问题。

import pandas as pd
import numpy as np

data = pd.read_csv('../Housing.csv', usecols = [1])
data1 = pd.read_csv('../Housing.csv', usecols = [3])
data = np.squeeze(np.array(data))
data1 = np.squeeze(np.array(data1))

x = data
y = data1
regression = np.polyfit(x, y, 1)

这是一个二维数组吗?显然我只取了一列。请指导我更好地理解。 - Pragyaditya Das

2

pandas.read_csv()会返回一个DataFrame,它有两个维度,而np.polyfit需要一个1D向量作为单次拟合的xy。你可以使用.squeeze()read_csv()的输出转换为pd.Series以匹配np.polyfit()的输入格式,从而实现简单的转换。

data = pd.read_csv('../Housing.csv', usecols = [1]).squeeze()
data1 = p.read_csv("...path\Housing.csv", usecols=[3]).squeeze()

工作得非常完美。但是,你能否给我一些基本背景知识,或者至少提供一个可以参考和学习的链接? - Pragyaditya Das

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接