как преобразовать набор данных в X_train, если он содержит строку - PullRequest
0 голосов
/ 08 января 2020

Я хочу попробовать реализовать LDA или КПК в sklearn, но в данных есть строка

#topic will be change to number using label encoder, get extract from the file 

       topics = [
'computer_graphics',
'operating_systems',
'computer_security',
'application_service',
'computer_software',
'artificial_intelligence',
'search_engine',
'information_society',
]

df = pd.DataFrame(
        docs,
        columns=["topic","body"],
        dtype="category"
)



tagger = MeCab.Tagger("-Owakati")

def parse_to_wakati(text):
    return tagger.parse(text).strip()

df = df.assign(body_wakati=df.body.apply(parse_to_wakati))


le = LabelEncoder()
y = le.fit_transform(df.topic)


X_train, X_test, y_train, y_test = train_test_split(
                                      df.body_wakati,  #data
                                      y,  #here the y is classification
                                      test_size=0.2,
                                      random_state=10,
                                      shuffle=True
)


from sklearn.preprocessing import StandardScaler

sc = StandardScaler()

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
X_train = sc.fit_transform(pipeline.fit(X_train)) ->error
X_test = sc.transform(X_test)

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA

lda = LDA(n_components=1)
X_train = lda.fit_transform(X_train, y_train)
X_test = lda.transform(X_test)

from sklearn.ensemble import RandomForestClassifier

classifier = RandomForestClassifier(max_depth=2, random_state=0)

classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)

я получил:

Невозможно центрировать разреженные матрицы: вместо этого передайте with_mean=False. См. Docstring для мотивации и альтернатив.

или

ValueError: не удалось преобразовать строку в число с плавающей точкой: 'お 気 に 入 り の Ubuntu: 無償 OS & amp; う ソ フ ト で 何 で も 揃 う! : 10 04 LTS 日本語 Remix 版 '

обычно для реализации другого алгоритма, я использую конвейер

from sklearn.svm import LinearSVC
svm_clf = Pipeline([
    ("tfidf", TfidfVectorizer()),
    ("clf", LinearSVC()),
])
svm_clf.fit(X_train, y_train)
pred = svm_clf.predict(X_test)

Я также пытался подгонять и преобразовывать вручную, как vect = CountVectorizer ()

tfidf = TfidfTransformer()

vX = vect.fit_transform(X_train)
tfidfX = tfidf.fit_transform(vX)

X_train = sc.fit_transform(tfidfX) ->error too

X_train данные для справки enter image description here

...