无法绘制线性回归散点图和预测线

时间:2019-06-16 04:12:27

标签: python pandas numpy matplotlib linear-regression

我尝试了很多方法,并遇到了许多已经在这里回答但徒劳的问题。没有一个可以解决我的问题。因此,如果您不能解决此问题,请至少不要将其标记为“重复”,因为我非常希望能使我的模型正常工作,并且会陷入这种愚蠢的语法错误。

所以,我的查询非常简单,我有一个包含2列的数据框,第一个是'sqft_living',第二个是'price'。因此,我已经使用线性回归基于其平方英尺面积预测价格。我想将其可视化为散点图,然后是最佳拟合线。但是,出现此错误: TypeError:无法散列的类型:'numpy.ndarray' 我已经将数据框转换为序列并更正了尺寸,但仍然收到此错误。 请向我提供解决方案代码以及开发信息。 由于我对此一无所知,因此无法完成我的任务,我们将不胜感激。 下面是我得到的确切代码和错误。

import numpy as np
import matplotlib.pyplot as plt  # To visualize
import pandas as pd  # To read data
from sklearn.linear_model import LinearRegression

X = poly1_data.iloc[:, 0].values.reshape(-1, 1)  # values converts it into a numpy array
Y = poly1_data.iloc[:, 1].values.reshape(-1, 1)  # -1 means that calculate the dimension of rows, but have 1 column
linear_regressor = LinearRegression()  # create object for the class
linear_regressor.fit(X, Y)  # perform linear regression
Y_pred = linear_regressor.predict(X)  # make predictions
plt.scatter(X, Y)
plt.plot(X, Y_pred, color='red')
plt.show()
--------------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)
<ipython-input-245-96227c9411b1> in <module>
      9 linear_regressor.fit(X, Y)  # perform linear regression
     10 Y_pred = linear_regressor.predict(X)  # make predictions
---> 11 plt.scatter(X, Y)
     12 plt.plot(X, Y_pred, color='red')
     13 plt.show()

C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\pyplot.py in scatter(x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, data, **kwargs)
   2860         vmin=vmin, vmax=vmax, alpha=alpha, linewidths=linewidths,
   2861         verts=verts, edgecolors=edgecolors, **({"data": data} if data
-> 2862         is not None else {}), **kwargs)
   2863     sci(__ret)
   2864     return __ret

C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\__init__.py in inner(ax, data, *args, **kwargs)
   1808                         "the Matplotlib list!)" % (label_namer, func.__name__),
   1809                         RuntimeWarning, stacklevel=2)
-> 1810             return func(ax, *args, **kwargs)
   1811 
   1812         inner.__doc__ = _add_data_doc(inner.__doc__,

C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\axes\_axes.py in scatter(self, x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, **kwargs)
   4170             edgecolors = 'face'
   4171 
-> 4172         self._process_unit_info(xdata=x, ydata=y, kwargs=kwargs)
   4173         x = self.convert_xunits(x)
   4174         y = self.convert_yunits(y)

C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\axes\_base.py in _process_unit_info(self, xdata, ydata, kwargs)
   2133             return kwargs
   2134 
-> 2135         kwargs = _process_single_axis(xdata, self.xaxis, 'xunits', kwargs)
   2136         kwargs = _process_single_axis(ydata, self.yaxis, 'yunits', kwargs)
   2137         return kwargs

C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\axes\_base.py in _process_single_axis(data, axis, unit_name, kwargs)
   2116                 # We only need to update if there is nothing set yet.
   2117                 if not axis.have_units():
-> 2118                     axis.update_units(data)
   2119 
   2120             # Check for units in the kwargs, and if present update axis

C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\axis.py in update_units(self, data)
   1471         neednew = self.converter != converter
   1472         self.converter = converter
-> 1473         default = self.converter.default_units(data, self)
   1474         if default is not None and self.units is None:
   1475             self.set_units(default)

C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\category.py in default_units(data, axis)
    101         # default_units->axis_info->convert
    102         if axis.units is None:
--> 103             axis.set_units(UnitData(data))
    104         else:
    105             axis.units.update(data)

C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\category.py in __init__(self, data)
    167         self._counter = itertools.count()
    168         if data is not None:
--> 169             self.update(data)
    170 
    171     def update(self, data):

C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\category.py in update(self, data)
    184         data = np.atleast_1d(np.array(data, dtype=object))
    185 
--> 186         for val in OrderedDict.fromkeys(data):
    187             if not isinstance(val, (str, bytes)):
    188                 raise TypeError("{val!r} is not a string".format(val=val))

TypeError: unhashable type: 'numpy.ndarray'

````[I am getting this image without any scatter plot and best fit line][1]


  [1]: https://i.stack.imgur.com/9jccu.png

0 个答案:

没有答案