首页 > 解决方案 > 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。我没有明白这一点,例如为什么在将其安装到模型上时会引发错误。

标签: pythonpandasmachine-learningscikit-learn

解决方案


看起来您的ANSWERTEXT列包含分类值,并且您必须在将其提供给模型之前以数字形式对它们进行编码。因为机器学习模型不理解文本。在使用之前在数据框上使用此代码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.


推荐阅读