基于标签运行三个回归模型



我试图根据提供给我的数据运行三个不同的回归。我们的想法是了解甜味和苦味是如何联系在一起的,但我们有三种不同的苹果酒:{干的、半干的、甜的}。

我想的是,首先用所有的x值做一个散点图,不管我们有哪种苹果酒,然后基于三种不同的"切片"熊猫df,x_dry,x_semidy和x_sweet,建立三个不同的回归模型。

我得到一个错误行20,说我本质上是用一个numpy数组乘以一个int。因此,为了开始解决我的问题,我尝试列出(myarray(。但是,错误仍然存在。有人能在这里给我指正确的方向吗?

我得到的错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-138-fa4209c61f04> in <module>
20     return slope*i + intercept
21 
---> 22 mymodeldry = list(map(myfunc, x_dry))
23 mymodelsemidry = list(map(myfunc, x_semidry))
24 mymodelsweet = list(map(myfunc, x_sweet))
<ipython-input-138-fa4209c61f04> in myfunc(i)
18 
19 def myfunc(i):
---> 20     return slope*i + intercept
21 
22 mymodeldry = list(map(myfunc, x_dry))
TypeError: can't multiply sequence by non-int of type 'numpy.float64'

我的代码

# d) Represent the sweet flavor according to the bitter flavor and add the regression line, for each type of cider.
x = list(ciderdf["Sweetness"])
x_dry = ciderdf[ciderdf["Type"]=="Dry"]
x_dry = list(x_dry[["Sweetness"]])
x_semidry = ciderdf[ciderdf["Type"]=="Semi-dry"]
x_semidry = list(x_semidry[["Sweetness"]])
x_sweet = ciderdf[ciderdf["Type"]=="Sweet"]
x_sweet = list(x_sweet[["Sweetness"]])
y = list(ciderdf["Bitterness"])
slope, intercept, r, p, std_err = stats.linregress(x, y)
slope, intercept, r, p, std_err = stats.linregress(x, y)
slope, intercept, r, p, std_err = stats.linregress(x, y)
def myfunc(i):
return slope*i + intercept
mymodeldry = list(map(myfunc, x_dry))
mymodelsemidry = list(map(myfunc, x_semidry))
mymodelsweet = list(map(myfunc, x_sweet))
plt.scatter(x,y)
plt.plot(x, mymodeldry, mymodelsemidry, mymodelsweet)
plt.show()

错误在x_dry = list(x_dry[["Sweetness"]])中。执行此操作时,将返回x_dry = ['Sweetness']

因此,在map函数中,您实质上是将浮点slope与一个字符串相乘,该字符串将引发TypeError: can't multiply sequence by non-int of type 'numpy.float64'

改为执行以下操作:x_dry = x_dry["Sweetness"].tolist()

df = pd.DataFrame({'a':[1,2,3], 'b':[4,5,6]})
x_dry = df["a"].tolist()
print(x_dry)
def myfunc(i):
return 3.14*i + 2.56
mymodeldry = list(map(myfunc, x_dry))
print(mymodeldry)

输出:

[1, 2, 3]
[5.7, 8.84, 11.98]

您实际上是在将列表乘以浮点值,这是不可能的。事实上,这仅在int的情况下是可能的,因为将列表乘以数字n重复列表n次。

我认为您想将列表中的每个元素乘以一个浮点值,可以通过在numpy数组x_dry = np.array(list(x_dry[["Sweetness"]]))中转换列表x_dry = list(x_dry[["Sweetness"]])来实现

相关内容

  • 没有找到相关文章

最新更新