Python 2.7 如何在python scikit learn中预测dict矢量化后的单个新样本?

Python 2.7 如何在python scikit learn中预测dict矢量化后的单个新样本?,python-2.7,machine-learning,scikit-learn,prediction,logistic-regression,Python 2.7,Machine Learning,Scikit Learn,Prediction,Logistic Regression,我正在使用逻辑回归分类器预测种族类别标签0,1。我的数据分为测试样本和训练样本,并将dict矢量化为稀疏矩阵 以下是工作代码,其中我预测并验证X_train和X_test,这是矢量化特征的一部分: for i in mass[k]: df = df_temp # reset df before each loop #$$ if 1==1: count+=1 ethnicity_tar = str(i) ######################

我正在使用逻辑回归分类器预测种族类别标签0,1。我的数据分为测试样本和训练样本,并将dict矢量化为稀疏矩阵

以下是工作代码,其中我预测并验证X_train和X_test,这是矢量化特征的一部分:

for i in mass[k]:
    df = df_temp # reset df before each loop
    #$$ 
    if 1==1:
    count+=1
    ethnicity_tar = str(i)
    ############################################
    ############################################

    def ethnicity_target(row):
        try:
            if row[ethnicity_var] == ethnicity_tar:
                return 1
            else:
                return 0
        except: return None
    df['ethnicity_scan'] = df.apply(ethnicity_target, axis=1)
    print '1=', ethnicity_tar
    print '0=', 'non-'+ethnicity_tar

    # Random sampling a smaller dataframe for debugging
    rows = df.sample(n=subsample_size, random_state=seed) # Seed gives fixed randomness
    df = DataFrame(rows)
    print 'Class count:'
    print df['ethnicity_scan'].value_counts()

    # Assign X and y variables
    X = df.raw_name.values
    X2 = df.name.values
    X3 = df.gender.values
    X4 = df.location.values
    y = df.ethnicity_scan.values

    # Feature extraction functions
    def feature_full_name(nameString):
        try:
            full_name = nameString
            if len(full_name) > 1: # not accept name with only 1 character
                return full_name
            else: return '?'
        except: return '?'

    def feature_full_last_name(nameString):
        try:
            last_name = nameString.rsplit(None, 1)[-1]
            if len(last_name) > 1: # not accept name with only 1 character
                return last_name
            else: return '?'
        except: return '?'

    def feature_full_first_name(nameString):
        try:
            first_name = nameString.rsplit(' ', 1)[0]
            if len(first_name) > 1: # not accept name with only 1 character
                return first_name
            else: return '?'
        except: return '?'

    # Transform format of X variables, and spit out a numpy array for all features
    my_dict = [{'last-name': feature_full_last_name(i)} for i in X]
    my_dict5 = [{'first-name': feature_full_first_name(i)} for i in X]

    all_dict = []
    for i in range(0, len(my_dict)):
        temp_dict = dict(
            my_dict[i].items() + my_dict5[i].items()
            )
        all_dict.append(temp_dict)

    newX = dv.fit_transform(all_dict)

    # Separate the training and testing data sets
    X_train, X_test, y_train, y_test = cross_validation.train_test_split(newX, y, test_size=testTrainSplit)

    # Fitting X and y into model, using training data
    classifierUsed2.fit(X_train, y_train)

    # Making predictions using trained data
    y_train_predictions = classifierUsed2.predict(X_train)
    y_test_predictions = classifierUsed2.predict(X_test)
然而,我只想预测一个名字,例如“约翰·卡特”,并预测种族标签。我用以下行替换了
y\u train\u predictions=classifiedRused2.predict(X\u train)
y\u train\u predictions=classifiedRused2.predict(X\u train)
,但导致错误:

print classifierUsed2.predict(["John Carter"])

#error
Error: X has 1 features per sample; expecting 103916

您需要以与训练数据完全相同的方式转换数据,因此类似(如果您的输入数据只是字符串列表)


请尝试类似ClassifiedRused2.predict(dv.transform(“John Carter”))的方法,谢谢,但它会说“错误:'str'对象没有属性'iteritems'”
classifierUsed2.predict(dv.transform(["John Carter"]))