python-2.7 – TypeError:预期序列或类似数组,得到估算器

前端之家收集整理的这篇文章主要介绍了python-2.7 – TypeError:预期序列或类似数组,得到估算器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个对产品进行用户评论的项目.我使用TfidfVectorizer从我的数据集中提取功能,除了我手动提取的一些其他功能.
df = pd.read_csv('reviews.csv',header=0)

FEATURES = ['feature1','feature2']
reviews = df['review']
reviews = reviews.values.flatten()

vectorizer = TfidfVectorizer(min_df=1,decode_error='ignore',ngram_range=(1,3),stop_words='english',max_features=45)

X = vectorizer.fit_transform(reviews)
idf = vectorizer.idf_
features = vectorizer.get_feature_names()
FEATURES += features
inverse =  vectorizer.inverse_transform(X)

for i,row in df.iterrows():
    for f in features:
        df.set_value(i,f,False)
    for inv in inverse[i]:
        df.set_value(i,inv,True)

train_df,test_df = train_test_split(df,test_size = 0.2,random_state=700)

上面的代码工作正常.但是当我将max_features从45更改为更高的值时,我在tran_test_split行上出现错误.

错误是:

Traceback(最近一次调用最后一次):
文件“analysis.py”,第120行,< module>
train_df,random_state = 700)
在train_test_split中输入文件“/Users/user/Tools/anaconda/lib/python2.7/site-packages/sklearn/cross_validation.py”,第1906行
arrays = indexable(* arrays)
文件“/Users/user/Tools/anaconda/lib/python2.7/site-packages/sklearn/utils/validation.py”,第201行,可转位
check_consistent_length(*结果)
在check_consistent_length中输入文件“/Users/user/Tools/anaconda/lib/python2.7/site-packages/sklearn/utils/validation.py”,第173行
uniques = np.unique(如果X不是None,则数组中X为[_ num_samples(X)])
在_num_samples中输入文件“/Users/user/Tools/anaconda/lib/python2.7/site-packages/sklearn/utils/validation.py”,第112行
‘estimator%s’%x)
TypeError:预期序列或类似数组,得到估计量

当我改变增加max_features大小时,我不确定究竟发生了什么变化.

如果您需要更多数据或者我错过了什么,请告诉我

解决方法

我知道这是旧的,但我有同样的问题,虽然@shahins的答案有效,但我想要保留数据帧对象的东西,以便我可以在train / test splits中进行索引.

解:

将数据框列重命名为适合的东西(其他):

df = df.rename(columns = {'fit': 'fit_feature'})

为什么会这样:

实际上并不是问题的特征数量,特别是导致问题的一个特征.我猜你正在将“fit”这个词作为你的一个文本特征(并且它没有显示出较低的max_features阈值).

查看sklearn源代码,它会检查以确保您没有通过测试查看任何对象是否具有“适合”属性来传递sklearn估算器.代码正在检查sklearn估计器的拟合方法,但是当你有一个数据框的拟合列时也会引发异常(记住df.fit和df [‘fit’]都选择“fit”列).

猜你在找的Python相关文章