我一直试图在spyder IDE上的python中实现多项式回归模型,一切正常,最后,当我尝试从numpy添加ranging函数时,它给了我以下错误!!
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
dataset = pd.read_csv("Position_Salaries.csv")
X = dataset.iloc[:, 1:2]
y = dataset.iloc[:, 2]
#fitting the linear regression model
from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression()
lin_reg.fit(X,y)
#fitting the polynomial linear Regression
from sklearn.preprocessing import PolynomialFeatures
poly_reg = PolynomialFeatures(degree = 4)
X_poly = poly_reg.fit_transform(X)
lin_reg2 = LinearRegression()
lin_reg2.fit(X_poly,y)
#visualising the linear regression results
plt.scatter(X,y ,color = 'red')
plt.plot(X,lin_reg.predict(X), color='blue')
plt.title('linear regression model')
plt.xlabel('positive level')
plt.ylabel('salary')
plt.show()
#the code doesnt work here on this np.arrange linee !!!
#visualisng the polynomial results
X_grid = np.arange(min(X),max(X), 0.1)
X_grid = X_grid.reshape((len(X_grid), 1))
plt.scatter(X,y ,color = 'red')
plt.plot(X_grid,lin_reg2.predict( poly_reg.fit_transform(X_grid)), color='blue')
plt.title('linear regression model')
plt.xlabel('positive level')
plt.ylabel('salary')
plt.show()
它应该可以正常运行和执行!
答案 0 :(得分:1)
尝试此代码。这对我很有效,因为我也在做Udemy讲座。
using
答案 1 :(得分:0)
您需要确保输入的内容均具有正确的类型。在我看来,op的类型都是str
。也许尝试通过float(x)
或一些类似函数将它们转换为浮点数?
答案 2 :(得分:0)
您应该检查X和y中的内容。它们可能是包含字符串的系列对象。您想要的是提取X和y中的值,然后再对它们进行任何处理,将它们转换为float / ints。
类似的东西:
X = dataset.iloc[:, 1:2].astype(float)
y = dataset.iloc[:, 2].astype(float)
答案 3 :(得分:0)
如果此错误发生在:
np.arange(min(X),max(X), 0.1)
这一定是因为min(X)
和max(X)
是字符串。
In [385]: np.arange('123','125')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-385-0a55b396a7c3> in <module>
----> 1 np.arange('123','125')
TypeError: unsupported operand type(s) for -: 'str' and 'str'
由于X
是pandas
对象(数据框或序列?),所以这并不奇怪。 pandas
在不能使用数字(并且不使用numpy字符串dtype)时可以自由使用dtype对象:
X = dataset.iloc[:, 1:2]
np.arange(np.array('123'),np.array('125'))
产生不同的错误,关于“ U3” dtypes。
LinearRegresion调用与此X
一起工作的事实有点令人费解,但我不知道它如何清除其输入。
无论如何,我会在min(X)
调用之前检查arange
,查看其值和类型。如果是字符串,则更详细地探索X
。
在注释中,您说:there are two columns and all have integers from 1-10 and 45k to 100k.
是'45k'是整数还是字符串?
让我们对虚拟数据帧进行测试:
In [392]: df = pd.DataFrame([[1,45000],[2,46000],[3,47000]], columns=('A','B'))
In [393]: df
Out[393]:
A B
0 1 45000
1 2 46000
2 3 47000
In [394]: min(df)
Out[394]: 'A'
In [395]: max(df)
Out[395]: 'B'
min
和max
产生字符串-从列名派生。
相反,fit
函数可能与数据帧的数组值一起工作:
In [397]: df.to_numpy()
Out[397]:
array([[ 1, 45000],
[ 2, 46000],
[ 3, 47000]])
不要以为事情应该起作用!测试,调试,打印可疑值。
min/max
是python函数。 numpy的操作以对数据帧敏感的方式进行操作-
In [399]: np.min(df) # delegates to df.min()
Out[399]:
A 1
B 45000
dtype: int64
In [400]: np.max(df)
Out[400]:
A 3
B 47000
dtype: int64
尽管这些都不是arange
的适当输入。
通过此arange
通话,您打算产生什么?
arange
在数据框的一列范围内有效:
In [405]: np.arange(np.min(df['A']), np.max(df['A']),.1)
Out[405]:
array([1. , 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2. , 2.1, 2.2,
2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9])
答案 4 :(得分:0)
使用此:
lib.c
因为您只需要接受x = dataset.iloc[:, 1:2].values
y = dataset.iloc[:, -1:].values
和x
中的数值。
使用y
意味着它将不在dataset.iloc[].values
和Level
数据集中包含Salary
和x
名称。
答案 5 :(得分:0)
替换
X = dataset.iloc[:, 1:2] and y = dataset.iloc[:, 2]
使用
X = dataset.iloc[:, 1:2].values and y = dataset.iloc[:, 2].values
答案 6 :(得分:0)
检查您是否从数据集中获取值。记住是:
x = dataset.iloc[:, 1:-1].values
y = dataset.iloc[:, -1].values
不是:
x = dataset.iloc[:, 1:-1]
y = dataset.iloc[:, -1]
如果没有 ".values"
,您会得到错误消息显示的字符串 ("str")
答案 7 :(得分:0)
试试下面的代码:
X_grid = np.arange(float(min(X ['Level'])), float(max(X['Level'])), 0.01, dtype= float)