python - ValueError:无法将字符串转换为浮点数:“是的,策略”同时适合我的逻辑回归模型
问题描述
我正在使用 pandas 阅读 excelsheet,excelsheet 的列超过 10,我只对 3 感兴趣,所以我阅读它,删除具有 Null 值的行,然后创建测试和验证集。在将其拟合到逻辑回归模型时,出现错误
这是代码
train, tv = train_test_split(df1, test_size=0.2, random_state=0)
test, val = train_test_split(tv, test_size=0.5, random_state=0)
# Logistic Regression
lr = LogisticRegression()
logit_model = lr.fit(train, test)
堆栈跟踪:
Traceback (most recent call last):
File "ml.py", line 22, in <module>
logit_model = lr.fit(train, test)
File "F:\proj\venv\lib\site-packages\sklearn\linear_model\_logistic.py", line 1344, in fit
X, y = self._validate_data(X, y, accept_sparse='csr', dtype=_dtype,
File "F:\proj\venv\lib\site-packages\sklearn\base.py", line 433, in _validate_data
X, y = check_X_y(X, y, **check_params)
File "F:\proj\venv\lib\site-packages\sklearn\utils\validation.py", line 63, in inner_f
return f(*args, **kwargs)
File "F:\proj\venv\lib\site-packages\sklearn\utils\validation.py", line 871, in check_X_y
X = check_array(X, accept_sparse=accept_sparse,
File "F:\proj\venv\lib\site-packages\sklearn\utils\validation.py", line 63, in inner_f
return f(*args, **kwargs)
File "F:\proj\venv\lib\site-packages\sklearn\utils\validation.py", line 673, in check_array
array = np.asarray(array, order=order, dtype=dtype)
File "F:\proj\venv\lib\site-packages\pandas\core\generic.py", line 1990, in __array__
return np.asarray(self._values, dtype=dtype)
ValueError: could not convert string to float: 'Yes, policy'
数据框看起来像这样:
ID ANSWER TEXT
0 24100.0 Yes, policy Source text snippet:The ACS Group combines its...
1 24100.0 Yes, policy Source text snippet:The ACS Environmental Poli...
2 24100.0 Yes, policy Source text snippet:The ACS Environmental Poli...
3 24100.0 Yes, policy Source text snippet:6. CONTENTS OF THE ENVIRON...
4 24100.0 Yes, policy Source text snippet:6. CONTENTS OF THE ENVIRON...
通过查看 valueerror 我认为这可能是因为 Answer 列中 Yes 之后的逗号,但即使在删除它之后也会给出相同的错误。excel 中的 ID 看起来像 24100,但是当我在数据框中检查它的类型时,它显示为 float64 并显示为 24100.0。我没有明白这一点,例如为什么在将其安装到模型上时会引发错误。
解决方案
看起来您的ANSWER
和TEXT
列包含分类值,并且您必须在将其提供给模型之前以数字形式对它们进行编码。因为机器学习模型不理解文本。在使用之前在数据框上使用此代码train_test_split
from sklearn.preprocessing import LabelEncoder
df['TEXT'] = df['TEXT'].astype('str')
df['ANSWER'] = df['ANSWER'].astype('str')
df[['ANSWER', 'TEXT']] = df[['ANSWER', 'TEXT']].apply(LabelEncoder().fit_transform)
此外,这是一个多类分类问题,因此Logistic Regression
不会给您带来好的结果。使用RandomForestClassifier
.
推荐阅读
- azure - 天蓝色 SAS | 错误 | 确保 Authorization 标头的值正确形成,包括签名
- python - subprocess.py 返回文件未找到错误
- google-sheets - 谷歌表格:图表:增加移动平均趋势线周期
- python - 在 Python 中将 MLP 合并到 CNN
- python - TypeError:numpy.float64 对象不可迭代
- react-native - React Native 调整图片 url
- python-3.x - 如何仅将文本文件中的 1 行添加到列表中以验证内容,然后移至下一行?
- php - 当用户未在 wordpress 上登录时出现 bool(true) 消息
- arrays - 在 MongoDB 中对嵌套数组列表中的匹配元素进行排序和排名
- ios - 如何判断用户是否按下了 widgetURL