得到错误"无法将字符串转换为浮点数"在countvectorized稀疏数据集中

时间:2017-11-01 06:37:36

标签: pandas scikit-learn

我是带有文本数据,分类和数字数据的数据集。我对文本数据进行了计数,并将其添加到数据框中。现在我正在尝试适应模型我得到以下错误

错误

<span class="grid-feature feature_{$feature.description|lower|replace:' ':'-' nofilter}"></span>

代码

~\AppData\Local\Continuum\anaconda3\lib\site-packages\sklearn\utils\validation.py in check_array(array, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
    400                                       force_all_finite)
    401     else:
--> 402         array = np.array(array, dtype=dtype, order=order, copy=copy)
    403 
    404         if ensure_2d:

ValueError: could not convert string to float: 'IP'

我想这是因为分类数据在建模时没有转换成数值数据。我如何动态地将它们转换为数字数据

稀疏矩阵内的分类字段

 cv = CountVectorizer( max_features = 500,analyzer='word') 
    cv_addr = cv.fit_transform(data.pop('Clean_addr'))
    for i, col in enumerate(cv.get_feature_names()):
        data[col] = pd.SparseSeries(cv_addr[:, i].toarray().ravel(), fill_value=0)

 train = data.drop(['Co_Name','Cust_ID','Phone','Shpr_ID','Resi_Cnt','Buz_Cnt','Nearby_Cnt','parseNumber','removeString','Qty','bins','Adj_Addr','Resi','Co_Name_FLag','Phone_Type'], axis=1)
    Y = data['Resi']

X_train, X_test, y_train, y_test = train_test_split(train, Y, test_size=0.3)
    gbc = GradientBoostingClassifier(max_depth = 7, n_estimators=1500, min_samples_leaf=10)

    print('Training GBC')

    gbc.fit(X_train, y_train)

1 个答案:

答案 0 :(得分:0)

您未获得此ValueError,因为您尚未从Product中删除train字段。

您在设计矩阵中确定了三个分类字段:ProductPhone_TypeCo_Name_FLag。当您定义train时,会删除后两者,但保留Product。如果您希望将Product作为预测变量,请在{1}}仍处于Pandas格式时应用pd.get_dummies(),或者使用sklearn LabelEncoder

无论哪种方式,重点是将分类变量转换为一系列表示每个类别级别的指标变量。