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大小时,我不确定究竟发生了什么变化.
如果您需要更多数据或者我错过了什么,请告诉我
解决方法
解:
将数据框列重命名为适合的东西(其他):
df = df.rename(columns = {'fit': 'fit_feature'})
为什么会这样:
实际上并不是问题的特征数量,特别是导致问题的一个特征.我猜你正在将“fit”这个词作为你的一个文本特征(并且它没有显示出较低的max_features阈值).
查看sklearn源代码,它会检查以确保您没有通过测试查看任何对象是否具有“适合”属性来传递sklearn估算器.代码正在检查sklearn估计器的拟合方法,但是当你有一个数据框的拟合列时也会引发异常(记住df.fit和df [‘fit’]都选择“fit”列).