我是带有文本数据,分类和数字数据的数据集。我对文本数据进行了计数,并将其添加到数据框中。现在我正在尝试适应模型我得到以下错误
错误
<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)
答案 0 :(得分:0)
您未获得此ValueError
,因为您尚未从Product
中删除train
字段。
您在设计矩阵中确定了三个分类字段:Product
,Phone_Type
和Co_Name_FLag
。当您定义train
时,会删除后两者,但保留Product
。如果您希望将Product
作为预测变量,请在{1}}仍处于Pandas格式时应用pd.get_dummies()
,或者使用sklearn
LabelEncoder
。
无论哪种方式,重点是将分类变量转换为一系列表示每个类别级别的指标变量。