<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Рецензии на imdb
Step1:  Имеются 25000 рецензий пользователей imdb с бинарными метками, посчитанными по оценкам
Step2:  Классы сбалансированы
Step3:  Разобъём выборку на обучение и контроль
Step4:  Векторизуем тексты рецензий
Step5:  Логистическая регрессия
Настроим на векторизованных данных логистическую регрессию и посчитаем AUC
Step6:  Признаков получилось очень много
Step7:  Попробуем отбирать признаки с помощью лассо
Step8:  Ещё один способ отбора признаков — рандомизированная логистическая регрессия
Step9:  Посмотрим, сколько признаков отбирается
Step10:  Настроим логистическую регрессию на отобранных признаках
Step11:  Метод главных компонент
Сделаем 100 синтетических признаков с помощью метода главных компонент
Step12:  Обучим на них логистическую регрессию
Step13:  По 100 полученных таким способом признакам качество получается не намного хуже, чем по всем 66702!
Попробуем обучить на них обучить случайный лес
<ASSISTANT_TASK:>
Python Code:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
Explanation: Рецензии на imdb
End of explanation
imdb = pd.read_csv('labeledTrainData.tsv', delimiter='\t')
imdb.shape
imdb.head()
Explanation: Имеются 25000 рецензий пользователей imdb с бинарными метками, посчитанными по оценкам: 0 при оценке < 5 и 1 при оценке >=7.
Полные данные: https://www.kaggle.com/c/word2vec-nlp-tutorial/data
Загрузим выбоку:
End of explanation
imdb.sentiment.value_counts()
Explanation: Классы сбалансированы:
End of explanation
from sklearn.cross_validation import train_test_split
texts_train, texts_test, y_train, y_test = train_test_split(imdb.review.values, imdb.sentiment.values)
Explanation: Разобъём выборку на обучение и контроль:
End of explanation
from sklearn.feature_extraction.text import TfidfVectorizer
vect = TfidfVectorizer(sublinear_tf=True, use_idf=True)
X_train = vect.fit_transform(texts_train)
X_test = vect.transform(texts_test)
Explanation: Векторизуем тексты рецензий:
End of explanation
from sklearn.linear_model import LogisticRegression
from sklearn import metrics
clf = LogisticRegression()
clf.fit(X_train, y_train)
print metrics.accuracy_score(y_test, clf.predict(X_test))
print metrics.roc_auc_score(y_test, clf.predict_proba(X_test)[:, 1])
Explanation: Логистическая регрессия
Настроим на векторизованных данных логистическую регрессию и посчитаем AUC:
End of explanation
X_train.shape
Explanation: Признаков получилось очень много:
End of explanation
clf = LogisticRegression(C=0.15, penalty='l1')
clf.fit(X_train, y_train)
print np.sum(np.abs(clf.coef_) > 1e-4)
print metrics.accuracy_score(y_test, clf.predict(X_test))
print metrics.roc_auc_score(y_test, clf.predict_proba(X_test)[:, 1])
Explanation: Попробуем отбирать признаки с помощью лассо:
End of explanation
from sklearn.linear_model import RandomizedLogisticRegression
rlg = RandomizedLogisticRegression(C=0.13)
rlg.fit(X_train, y_train)
Explanation: Ещё один способ отбора признаков — рандомизированная логистическая регрессия:
End of explanation
np.sum(rlg.scores_ > 0)
Explanation: Посмотрим, сколько признаков отбирается:
End of explanation
X_train_lasso = X_train[:, rlg.scores_ > 0]
X_test_lasso = X_test[:, rlg.scores_ > 0]
clf = LogisticRegression(C=1)
clf.fit(X_train_lasso, y_train)
print metrics.accuracy_score(y_test, clf.predict(X_test_lasso))
print metrics.roc_auc_score(y_test, clf.predict_proba(X_test_lasso)[:, 1])
Explanation: Настроим логистическую регрессию на отобранных признаках:
End of explanation
from sklearn.decomposition import TruncatedSVD
tsvd = TruncatedSVD(n_components=100)
X_train_pca = tsvd.fit_transform(X_train)
X_test_pca = tsvd.transform(X_test)
Explanation: Метод главных компонент
Сделаем 100 синтетических признаков с помощью метода главных компонент:
End of explanation
clf = LogisticRegression()
clf.fit(X_train_pca, y_train)
print metrics.accuracy_score(y_test, clf.predict(X_test_pca))
print metrics.roc_auc_score(y_test, clf.predict_proba(X_test_pca)[:, 1])
Explanation: Обучим на них логистическую регрессию:
End of explanation
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(n_estimators=100)
clf.fit(X_train_pca, y_train)
print metrics.accuracy_score(y_test, clf.predict(X_test_pca))
print metrics.roc_auc_score(y_test, clf.predict_proba(X_test_pca)[:, 1])
Explanation: По 100 полученных таким способом признакам качество получается не намного хуже, чем по всем 66702!
Попробуем обучить на них обучить случайный лес:
End of explanation
<END_TASK>