使用sckitlearn的文本矢量化器

时间:2017-11-19 12:15:53

标签: python pandas scikit-learn

我正在使用sckit-learn对文本数据进行预处理我的目标是获取我的数据的矢量表示(特征和标签),我所做的是使用tfidf矢量化特征,之后数据集大小由双倍大小改变使用 X.ravel()

之前的X(30376,2)

X之后(60752,41331)

我的问题是,当我在x向量中有两个特征时,我想正确地得到矢量表示我是如何做到的

 df = pd.read_csv('Dataset.csv',encoding='latin1')
    df = df.dropna()



    X = np.array(df.drop(['Type'], 1))
    y = np.array(df['Type'])




    #print(X)

    print("Extracting features from the training data using a sparse vectorizer")
    vectorizer= TfidfVectorizer(sublinear_tf=True, max_df=0.5,
                                     stop_words='english')
    X = vectorizer.fit_transform(X.ravel().astype('U'))

    imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
    X = imp.fit_transform(X)
    X.shape
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

如果是我使用 train_test_split 的情况我得到此错误我不明白它指的是什么

TypeError: Singleton array array(TfidfVectorizer(analyzer='word', binary=False, decode_error='strict',
        dtype=<class 'numpy.int64'>, encoding='utf-8', input='content',
        lowercase=True, max_df=0.5, max_features=None, min_df=1,
        ngram_range=(1, 1), norm='l2', preprocessor=None, smooth_idf=True,
        stop_words='english', strip_accents=None, sublinear_tf=True,
        token_pattern='(?u)\\b\\w\\w+\\b', tokenizer=None, use_idf=True,
        vocabulary=None), dtype=object) cannot be considered a valid collection.

任何建议和感谢

1 个答案:

答案 0 :(得分:0)

Xy形状错误。

这是一个excerpt from the validation.py,用于验证传递的数据集:

if hasattr(x, 'shape'):
    if len(x.shape) == 0:  # <----- NOTE !!!
        raise TypeError("Singleton array %r cannot be considered"
                        " a valid collection." % x)
    return x.shape[0]
else:
    return len(x)