-
Notifications
You must be signed in to change notification settings - Fork 0
/
opt_classifier.py
84 lines (68 loc) · 2.24 KB
/
opt_classifier.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import pandas as pd
import numpy as np
from sklearn import preprocessing
from sklearn.linear_model import SGDClassifier
from sklearn.cross_validation import KFold
from sklearn.metrics import roc_auc_score
from sklearn.preprocessing import Imputer
import random
__author__ = 'YBeer'
"""
use only columns over threshhold
"""
print 'loading univariante results'
uni_results = pd.read_csv("univar_AUC.csv", index_col=0, names=["index", "AUC"])
# print regression_matrix_indices
print 'loading dataset'
dataset = pd.DataFrame.from_csv("train_col_dummy.csv")
# rows = random.sample(dataset.index, 30000)
# dataset = dataset.ix[rows]
print 'changing to array'
dataset = np.array(dataset)
item_list = [0.3, 0.4, 0.5, 0.6, 0.7]
for item in item_list:
print item
classifier = SGDClassifier(loss='log', penalty='elasticnet', l1_ratio=0.6, n_iter=100, power_t=item)
uni_thresh = 0.3
print 'threshold is ', uni_thresh
regression_matrix_indices = []
for i in range(len(uni_results) - 1):
if uni_results['AUC'][i] > uni_thresh:
regression_matrix_indices.append(i)
print len(regression_matrix_indices)
X = dataset[:, regression_matrix_indices]
y = dataset[:, -1]
# impotate
print 'impotating'
imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
imp.fit(X)
X = imp.transform(X)
# standardizing results
print 'standardizing results'
scaler = preprocessing.StandardScaler().fit(X)
X = scaler.transform(X)
# # PCA
# print 'PCA results'
# pca_decomp = PCA(n_components=10)
# X_pca = pca_decomp.fit_transform(X)
#
# X = np.hstack((X, X_pca))
print X.shape
"""
full model CV
"""
# CV
cv_n = 4
kf = KFold(dataset.shape[0], n_folds=cv_n, shuffle=True)
print 'start full model evaluation'
auc = []
for train_index, test_index in kf:
X_train, X_test = X[train_index, :], X[test_index, :]
y_train, y_test = y[train_index].ravel(), y[test_index].ravel()
# train machine learning
classifier.fit(X_train, y_train)
# predict
class_pred = classifier.predict_proba(X_test)[:, 1]
# evaluate
auc.append(roc_auc_score(y_test, class_pred))
print item, ' auc is: ', np.mean(auc)