sklearn-LinearRegression:无法将字符串转换为浮点数:'--'
sklearn-LinearRegression: could not convert string to float: '--'
我正在尝试使用 sklearn 的 LinearRegression,我得到了 'Could not convert a string to float'。数据帧的所有列都是浮点数,输出 y 也是浮点数。我看过其他帖子,建议是转换为浮点数,我已经完成了。
<class 'pandas.core.frame.DataFrame'>
Int64Index: 789 entries, 158 to 684
Data columns (total 8 columns):
f1 789 non-null float64
f2 789 non-null float64
f3 789 non-null float64
f4 789 non-null float64
f5 789 non-null float64
f6 789 non-null float64
OFF 789 non-null uint8
ON 789 non-null uint8
dtypes: float64(6), uint8(2)
memory usage: 44.7 KB
type(y_train)
pandas.core.series.Series
type(y_train[0])
float
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,Y,random_state=0)
X_train.head()
from sklearn.linear_model import LinearRegression
linreg = LinearRegression().fit(X_train, y_train)
我得到的错误是
ValueError Traceback (most recent call last)
<ipython-input-282-c019320f8214> in <module>()
6 X_train.head()
7 from sklearn.linear_model import LinearRegression
----> 8 linreg = LinearRegression().fit(X_train, y_train)
510 n_jobs_ = self.n_jobs
511 X, y = check_X_y(X, y, accept_sparse=['csr', 'csc', 'coo'],
--> 512 y_numeric=True, multi_output=True)
513
514 if sample_weight is not None and np.atleast_1d(sample_weight).ndim > 1:
527 _assert_all_finite(y)
528 if y_numeric and y.dtype.kind == 'O':
--> 529 y = y.astype(np.float64)
530
531 check_consistent_length(X, y)
ValueError: could not convert string to float: '--'
请帮忙。
一个快速的解决方案是使用 pd.to_numeric
将您的数据可能包含的任何字符串转换为数值。如果它们与转换不兼容,它们将减少到 NaN
s。
from sklearn.linear_model import LinearRegression
X = X.apply(pd.to_numeric, errors='coerce')
Y = Y.apply(pd.to_numeric, errors='coerce')
此外,您可以选择用一些默认值填充这些值:
X.fillna(0, inplace=True)
Y.fillna(0, inplace=True)
用与您的问题相关的任何内容替换填充值。我不建议删除这些行,因为您最终可能会删除 X
和 Y
中的不同行,从而导致数据标签不匹配。
最后,拆分并调用你的分类器:
X_train, X_test, y_train, y_test = train_test_split(X, Y, random_state=0)
clf = LinearRegression().fit(X_train, y_train)
我认为使用标签编码或一种热编码将所有字符串列转换为二进制 (0,1) 比我们的线性回归表现更好。!!
这是因为您的其中一列包含字符串值。我遇到了同样的问题,因为有人要求我删除一个专栏,但我不必这样做,因为这些专栏已经被删除了。
但是,在执行此代码后:
model = LogisticRegressionCV(solver='lbfgs', cv=5, max_iter=1000, random_state=42)
model.fit(X_train, y_train)
我有这个错误:
could not convert string to float: 'product_mng'
原因是 X_train
仍然有字符串列,我认为它被删除了。作为结论,请再次检查您的所有列都不是字符串。如果有,用pd.drop
删除,或者label encode(或1-hot encode)这个字符串列。
我正在尝试使用 sklearn 的 LinearRegression,我得到了 'Could not convert a string to float'。数据帧的所有列都是浮点数,输出 y 也是浮点数。我看过其他帖子,建议是转换为浮点数,我已经完成了。
<class 'pandas.core.frame.DataFrame'>
Int64Index: 789 entries, 158 to 684
Data columns (total 8 columns):
f1 789 non-null float64
f2 789 non-null float64
f3 789 non-null float64
f4 789 non-null float64
f5 789 non-null float64
f6 789 non-null float64
OFF 789 non-null uint8
ON 789 non-null uint8
dtypes: float64(6), uint8(2)
memory usage: 44.7 KB
type(y_train)
pandas.core.series.Series
type(y_train[0])
float
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,Y,random_state=0)
X_train.head()
from sklearn.linear_model import LinearRegression
linreg = LinearRegression().fit(X_train, y_train)
我得到的错误是
ValueError Traceback (most recent call last)
<ipython-input-282-c019320f8214> in <module>()
6 X_train.head()
7 from sklearn.linear_model import LinearRegression
----> 8 linreg = LinearRegression().fit(X_train, y_train)
510 n_jobs_ = self.n_jobs
511 X, y = check_X_y(X, y, accept_sparse=['csr', 'csc', 'coo'],
--> 512 y_numeric=True, multi_output=True)
513
514 if sample_weight is not None and np.atleast_1d(sample_weight).ndim > 1:
527 _assert_all_finite(y)
528 if y_numeric and y.dtype.kind == 'O':
--> 529 y = y.astype(np.float64)
530
531 check_consistent_length(X, y)
ValueError: could not convert string to float: '--'
请帮忙。
一个快速的解决方案是使用 pd.to_numeric
将您的数据可能包含的任何字符串转换为数值。如果它们与转换不兼容,它们将减少到 NaN
s。
from sklearn.linear_model import LinearRegression
X = X.apply(pd.to_numeric, errors='coerce')
Y = Y.apply(pd.to_numeric, errors='coerce')
此外,您可以选择用一些默认值填充这些值:
X.fillna(0, inplace=True)
Y.fillna(0, inplace=True)
用与您的问题相关的任何内容替换填充值。我不建议删除这些行,因为您最终可能会删除 X
和 Y
中的不同行,从而导致数据标签不匹配。
最后,拆分并调用你的分类器:
X_train, X_test, y_train, y_test = train_test_split(X, Y, random_state=0)
clf = LinearRegression().fit(X_train, y_train)
我认为使用标签编码或一种热编码将所有字符串列转换为二进制 (0,1) 比我们的线性回归表现更好。!!
这是因为您的其中一列包含字符串值。我遇到了同样的问题,因为有人要求我删除一个专栏,但我不必这样做,因为这些专栏已经被删除了。
但是,在执行此代码后:
model = LogisticRegressionCV(solver='lbfgs', cv=5, max_iter=1000, random_state=42)
model.fit(X_train, y_train)
我有这个错误:
could not convert string to float: 'product_mng'
原因是 X_train
仍然有字符串列,我认为它被删除了。作为结论,请再次检查您的所有列都不是字符串。如果有,用pd.drop
删除,或者label encode(或1-hot encode)这个字符串列。