You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python机器学习报错求助:ValueError无法将字符串转为浮点

解决ValueError: could not convert string to float: 'Bright Green'问题

错误原因

你用于训练的特征集X包含字符串类型的name列(例如"Bright Green"),而Scikit-learn的LogisticRegression模型仅支持数值型输入,无法自动将字符串转换为浮点数,因此触发该错误。


解决方案

以下提供三种可行的解决方式,按实用性排序:

方案3:基于关键词提取特征(最优)

观察数据可发现,所有半透明颜色的名称均包含"Trans"关键词,直接提取该特征即可完成分类,准确率接近100%:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

data = pd.read_csv('colors_without_rgb.csv')

# 从name列提取是否包含"Trans"的特征,转为整数类型
data['has_trans'] = data['name'].str.contains('Trans', case=False).astype(int)
X = data[["has_trans"]]
# 将目标变量的't'/'f'转为1/0,适配模型要求
y = data['is_trans'].map({'t': 1, 'f': 0})

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

model = LogisticRegression()
model.fit(X_train, y_train)

predictions = model.predict(X_test)
accuracy = accuracy_score(y_test, predictions)
print(f"Accuracy: {accuracy:.2f}")

方案1:使用唯一标识id作为特征

每个颜色对应唯一的id,直接用id作为输入特征即可规避字符串问题:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

data = pd.read_csv('colors_without_rgb.csv')

# 仅保留id列作为特征
X = data[["id"]]
y = data['is_trans'].map({'t': 1, 'f': 0})

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

model = LogisticRegression()
model.fit(X_train, y_train)

predictions = model.predict(X_test)
accuracy = accuracy_score(y_test, predictions)
print(f"Accuracy: {accuracy:.2f}")

方案2:对name列进行独热编码

若需直接使用颜色名称作为特征,可通过独热编码将字符串转换为模型可识别的数值型特征:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline

data = pd.read_csv('colors_without_rgb.csv')

X = data[["name"]]
y = data['is_trans'].map({'t': 1, 'f': 0})

# 创建预处理管道,对name列执行独热编码
preprocessor = ColumnTransformer(
    transformers=[
        ('category_encoder', OneHotEncoder(handle_unknown='ignore'), ['name'])
    ])

# 构建包含预处理和模型的完整管道
model = Pipeline(steps=[
    ('preprocessor', preprocessor),
    ('classifier', LogisticRegression())
])

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

model.fit(X_train, y_train)

predictions = model.predict(X_test)
accuracy = accuracy_score(y_test, predictions)
print(f"Accuracy: {accuracy:.2f}")

内容的提问来源于stack exchange,提问作者EdwardTheTrain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 19:06:03