0

Я пытаюсь повторить этот проект на Python Binary Classification: Twitter sentiment analysisразреженных матриц и Dataframe в Python панд

шаги являются:

Step 1: Get data 
Step 2: Text preprocessing using R 
Step 3: Feature engineering 
Step 4: Split the data into train and test 
Step 5: Train prediction model 
Step 6: Evaluate model performance 
Step 7: Publish prediction web service 

Я на Step 4 сейчас, но я думаю, что я не могу продолжать.

import pandas 
import re 
from sklearn.feature_extraction import FeatureHasher 

from sklearn.feature_selection import SelectKBest 
from sklearn.feature_selection import chi2 

from sklearn import cross_validation 

#read the dataset of tweets 

header_row=['sentiment','tweetid','date','query', 'user', 'text'] 
train = pandas.read_csv("training.1600000.processed.noemoticon.csv",names=header_row) 

#keep only the right columns 

train = train[["sentiment","text"]] 

#remove puctuation, special characters, numbers and lower case the text 

def remove_spch(text): 

    return re.sub("[^a-z]", ' ', text.lower()) 

train['text'] = train['text'].apply(remove_spch) 


#Feature Hashing 

def tokens(doc): 
    """Extract tokens from doc. 

    This uses a simple regex to break strings into tokens. 
    """ 
    return (tok.lower() for tok in re.findall(r"\w+", doc)) 

n_features = 2**18 
hasher = FeatureHasher(n_features=n_features, input_type="string", non_negative=True) 
X = hasher.transform(tokens(d) for d in train['text']) 

#Feature Selection and choose the best 20.000 features using Chi-Square 

X_new = SelectKBest(chi2, k=20000).fit_transform(X, train['sentiment']) 

#Using Stratified KFold, split my data to train and test 

skf = cross_validation.StratifiedKFold(X_new, n_folds=2) 

Я уверен, что последняя строка является неправильным, так как он содержит только 20,000 функции а не Sentiment столбца из панд. Как я могу «присоединить» разреженную матрицу X_new с Dataframe train, чтобы включить ее в cross_validation, а затем использовать ее в классификаторе?

ответ

0

Вы должны передать свои метки классов в StratifiedKFold, а затем использовать skf как итератор, на каждой итерации он даст индексы для набора тестов и набора поездов, вы можете использовать их для разделения набора данных.

Посмотрите на пример кода на официальном scikit освоении документации: StratifiedKFold

+0

Через ваш ответ я обнаружил, что проблема была в другом месте, поэтому я открываю еще один вопрос. – Tasos

Смежные вопросы