【发布时间】:2014-03-15 23:56:12
【问题描述】:
我正在运行逻辑回归,并在文本列上运行 tf-idf。这是我在逻辑回归中使用的唯一列。我怎样才能确保尽可能地调整此参数?
我希望能够完成一组步骤,最终让我说我的逻辑回归分类器正在尽可能地运行。
from sklearn import metrics,preprocessing,cross_validation
from sklearn.feature_extraction.text import TfidfVectorizer
import sklearn.linear_model as lm
import pandas as p
loadData = lambda f: np.genfromtxt(open(f, 'r'), delimiter=' ')
print "loading data.."
traindata = list(np.array(p.read_table('train.tsv'))[:, 2])
testdata = list(np.array(p.read_table('test.tsv'))[:, 2])
y = np.array(p.read_table('train.tsv'))[:, -1]
tfv = TfidfVectorizer(min_df=3, max_features=None, strip_accents='unicode',
analyzer='word', token_pattern=r'\w{1,}',
ngram_range=(1, 2), use_idf=1, smooth_idf=1,
sublinear_tf=1)
rd = lm.LogisticRegression(penalty='l2', dual=True, tol=0.0001,
C=1, fit_intercept=True, intercept_scaling=1.0,
class_weight=None, random_state=None)
X_all = traindata + testdata
lentrain = len(traindata)
print "fitting pipeline"
tfv.fit(X_all)
print "transforming data"
X_all = tfv.transform(X_all)
X = X_all[:lentrain]
X_test = X_all[lentrain:]
print "20 Fold CV Score: ", np.mean(cross_validation.cross_val_score(rd, X, y, cv=20, scoring='roc_auc'))
print "training on full data"
rd.fit(X, y)
pred = rd.predict_proba(X_test)[:, 1]
testfile = p.read_csv('test.tsv', sep="\t", na_values=['?'], index_col=1)
pred_df = p.DataFrame(pred, index=testfile.index, columns=['label'])
pred_df.to_csv('benchmark.csv')
print "submission file created.."
【问题讨论】:
-
您能否更好地解释您要达到的目标?您要调整哪些超参数?逻辑回归没有任何超参数。
-
@George 抱歉不清楚。我只想确保传递给我的逻辑回归的参数是最好的。我希望能够完成一组步骤,最终让我说我的逻辑回归分类器正在尽可能地运行。
-
@George scikit-learn 的逻辑回归需要几个正则化参数。
-
所以这不是逻辑回归,而是 L1 或 L2 正则化版本?
-
@George Logistic 回归在 scikit-learn 中也有一个
C参数来控制模型的稀疏性。
标签: python numpy machine-learning artificial-intelligence scikit-learn