我有训练有素的模型。我想找出新数据属于哪个类。我做了一些试验,但是遇到了一些问题。
with open('text_classifier', 'rb') as training_model:
model = pickle.load(training_model)
y_pred2 = model.predict(X_test)
此代码有效
但是...
new_test_data=["spor toto süper lig 30. hafta medipol bu akşam ev göztepe
ile saat 20.30'da başla mücadele suat arslanboğa arslanboğa yardımcı
serka ok ve ismail şencan"]
tfidfconverter = TfidfVectorizer()
new_test_data = tfidfconverter.fit_transform(new_test_data).toarray()
model.predict(new_test_data)
我收到这样的错误
Number of features of the model must match the input. Model n_features is 9671 and input n_features is 25
我正在使用的代码块
data = load_files(r"...\docs",encoding="utf-8")
X, y = data.data, data.target
tfidfconverter = TfidfVectorizer(min_df=3, max_df=0.7)
X = tfidfconverter.fit_transform(X).toarray()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,
random_state=0)
classifier = RandomForestClassifier(n_estimators=1000, random_state=0)
classifier.fit(X_train, y_train)
y_pred2 = classifier.predict(X_test)
答案 0 :(得分:2)
我相信您需要在训练模型时在数据中指定要实际用作功能的参数。看来您的训练模型正在使用行条目作为功能,而不是每列。可以通过以下方法解决此问题:读入数据,然后转过来将其转换为CSV,然后再次读入。但是,如果您已经知道数据的结构,则该步骤应该是不必要的。基本上,您只需要知道数据列的名称即可。您将需要使用Pandas模块进行此方法。这是一些代码...
data = load_files(r"...\docs",encoding="utf-8")
data.to_csv('train_data.csv', encoding = 'utf-8', index = False)
然后从CSV中读回训练数据...
train_data = pd.read_csv('train_data.csv')
现在,当您调用train_test_split方法时,您应该指定要用作数据特征的内容。这通常是数据表中的列,因为这些是要收集的要分析的指标。我定义用于拆分数据的函数并构建用于指定特征的模型,因为我认为这更容易理解,但您也可以直接调用这些函数。
def split_dataset(dataset, train_percentage, feature_headers, target_header):
train_x, test_x, train_y, test_y = train_test_split(dataset[feature_headers],
dataset[target_header], train_size = train_percentage)
return train_x, test_x, train_y, test_y
def random_forest_classifier(features, target):
model = RandomForestClassifier(n_estimators = 500, oob_score = True, n_jobs
=-1,random_state = 1, min_impurity_decrease = .01)
model.fit(features, target)
return model
现在您可以使用数据来调用函数了。
train_x, test_x, train_y, test_y = split_dataset(train_data, 0.80,
train_data.columns[0:24], train_data.columns[-1])
trained_model = random_forest_classifier(train_x,train_y)
您现在应该可以使用25种功能针对训练有素的模型进行预测。