Python 如何对scikit进行逆变换?

Python 如何对scikit进行逆变换?,python,machine-learning,scikit-learn,Python,Machine Learning,Scikit Learn,我有一个培训数据CSV,我成功地预测了测试CSV的目标列。问题是我需要将结果反变换回字符串进行进一步分析 from sklearn import preprocessing lbl = preprocessing.LabelEncoder() for x in train.columns: if train[x].dtype == 'object': lbl.fit(list(train[x].values)) train[x] = lbl.transf

我有一个培训数据CSV,我成功地预测了测试CSV的目标列。问题是我需要将结果反变换回字符串进行进一步分析

from sklearn import preprocessing
lbl = preprocessing.LabelEncoder()

for x in train.columns:
    if train[x].dtype == 'object':
        lbl.fit(list(train[x].values))
        train[x] = lbl.transform(list(train[x].values))

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

y = train['target']
del train['target']

X = train
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=1,stratify=y)

clf = RandomForestClassifier(n_estimators = 500, max_depth = 6)
clf.fit(X_train,y_train)

RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',max_depth=6,max_features='auto', max_leaf_nodes=None,min_impurity_split=1e-07, min_samples_leaf=1,min_samples_split=2, min_weight_fraction_leaf=0.0,n_estimators=500, n_jobs=1, oob_score=False, random_state=None,verbose=0, warm_start=False)

predictions_test = clf.predict(X_test)

lbl = LabelEncoder()
lbl.fit(test['target'])
predictions_test = lbl.inverse_transform(predictions_test)
如果删除csv中目标列的值,我得到的输出如下。如何在CSV文件中写入预测值


数组([nan,nan,nan,…,nan,nan,nan])

您的错误是在循环中标记目标,循环后,目标基本上是[0,1,1,0…]。当您再次尝试编码它时,您正在编码0和1

from sklearn import preprocessing
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

train = pd.read_csv("test.csv", nrows=16281)
train = train.drop("Unnamed: 14", axis=1)

y = train['target']
del train['target']

for x in train.columns:
    if train[x].dtype == 'object':
        lbl.fit(list(train[x].values))
        train[x] = lbl.transform(list(train[x].values))

lbl_y = preprocessing.LabelEncoder()
lbl_y.fit(y)
y = lbl_y.transform(y)

predictions_testX = train
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=1,stratify=y)


clf = RandomForestClassifier(n_estimators = 500, max_depth = 6)
#clf = RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',max_depth=6,max_features='auto', max_leaf_nodes=None,min_impurity_split=1e-07, min_samples_leaf=1,min_samples_split=2, min_weight_fraction_leaf=0.0,n_estimators=500, n_jobs=1, oob_score=False, random_state=None,verbose=0, warm_start=False)
clf.fit(X_train,y_train)



predictions_test = clf.predict(X_test)
predictions_test = lbl_y.inverse_transform(predictions_test)

没有
预测
数组。应该是
predictions\u test
predictions\u test=lbl.反变换(predictions\u test)
@IronHandOdin,这是一个打字错误。我把lbl.fit(y)改成了lbl.fit(test['target']),看起来很有效。输出是数组([nan,nan,nan,…,nan,nan,nan]),如果我从测试中删除目标列值,你能提供数据样本吗?这是我的测试集,如果我从CSV中删除目标列,它返回nan@IronHandOdin,我不知道我的想法是否正确。我是新来的