gpt4 book ai didi

pandas - 无法在 python 中将字符串转换为 float 以及如何使用此数据集训练模型

转载 作者:行者123 更新时间:2023-11-30 09:46:28 25 4
gpt4 key购买 nike

我有一个包含以下列的数据集:年龄(float 类型)、性别(str 类型)、地区(str 类型)和费用(float 类型)。

我想使用年龄、性别和地区作为特征来预测费用,我该如何在 scikit learn 中做到这一点?

我尝试了一些方法,但它显示“ValueError:无法将字符串转换为 float :'northwest'”

import pandas as pd
import numpy as np
df = pd.read_csv('Desktop/insurance.csv')
X = df.loc[:,['age','sex','region']].values
y = df.loc[:,['charges']].values
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

from sklearn import svm
clf = svm.SVC(C=1.0, cache_size=200,decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf')
clf.fit(X_train, y_train)

最佳答案

region 列包含字符串,但不能在 SVM 分类器中使用,因为它不是向量。

因此,您必须将此列转换为 SVM 可以使用的内容。以下是将 region 更改为分类系列的示例:

import pandas as pd
from sklearn import svm
from sklearn.model_selection import train_test_split

df = pd.DataFrame({'age':[20,30,40,50],
'sex':['male','female','female','male'],
'region':['northwest','southwest','northeast','southeast'],
'charges':[1000,1000,2000,2000]})
df.sex = (df.sex == 'female')
df.region = pd.Categorical(df.region)
df.region = df.region.cat.codes
X = df.loc[:,['age','sex','region']]
y = df.loc[:,['charges']]

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

clf = svm.SVC(C=1.0, cache_size=200,decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf')
clf.fit(X_train, y_train)

解决此问题的另一种方法是使用 one-hot 矢量编码:

import pandas as pd
from sklearn import svm
from sklearn.model_selection import train_test_split

df = pd.DataFrame({'age':[20,30,40,50],
'sex':['male','female','female','male'],
'region':['northwest','southwest','northeast','southeast'],
'charges':[1000,1000,2000,2000]})
df.sex = (df.sex == 'female')
df = pd.concat([df,pd.get_dummies(df.region)],axis = 1).drop('region',1)
X = df.drop('charges',1)
y = df.charges
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

clf = svm.SVC(C=1.0, cache_size=200,decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf')
clf.fit(X_train, y_train)

另一种方法是执行标签编码:

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df.region = le.fit_transform(df.region)

这个方法列表当然并不详尽,它们根据您的问题执行不同的操作。

非数字数据的使用并不简单,需要对现有技术有一定的了解(我鼓励您去 kaggle 的论坛中搜索,在那里您可以找到有值(value)的信息)。

关于pandas - 无法在 python 中将字符串转换为 float 以及如何使用此数据集训练模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51895745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com