Skip to content

Commit

Permalink
svm cross validation
Browse files Browse the repository at this point in the history
  • Loading branch information
AlonDaks committed Dec 13, 2015
1 parent 24e5d9f commit 110593c
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 22 deletions.
2 changes: 1 addition & 1 deletion code/stat159lambda/classification/random_forest/rf.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ def __init__(self,
y,
max_features='auto',
depth=None,
n_estimators=400):
n_estimators=300):
self.model = RandomForestClassifier(max_features=max_features,
n_estimators=n_estimators,
max_depth=None,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from stat159lambda.classification import design_matrix as dm
from stat159lambda.classification.random_forest import rf
from stat159lambda.classification import partition_volumes as pv
from stat159lambda.config import REPO_HOME_PATH
from stat159lambda.config import REPO_HOME_PATH, NUM_VOXELS
from stat159lambda.linear_modeling import linear_modeling as lm
from stat159lambda.utils import data_path as dp

Expand Down
40 changes: 20 additions & 20 deletions code/stat159lambda/classification/svm/svm.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class Classifier:
-------
None
"""
def __init__(self, X, y, C=1.0, kernel='rbf', degree=2):
def __init__(self, X, y, C=.001, kernel='linear', degree=2):
if kernel == 'linear':
self.model = LinearSVC(C=C)
else:
Expand All @@ -35,30 +35,30 @@ def __init__(self, X, y, C=1.0, kernel='rbf', degree=2):


def train(self):
"""
Classifier method that fits the SVM model according to the given training
data X
"""
Classifier method that fits the SVM model according to the given training
data X
Parameters
----------
None
Parameters
----------
None
Returns
-------
self : object
"""
Returns
-------
self : object
"""
self.model.fit(self.X, self.y)

def predict(self, new_data):
"""
Performs classification on samples in new_data
"""
Performs classification on samples in new_data
Parameters
----------
new_data : array
Parameters
----------
new_data : array
Returns
-------
pred: array that contains class labels for samples in new_data
"""
Returns
-------
pred: array that contains class labels for samples in new_data
"""
return self.model.predict(new_data)
35 changes: 35 additions & 0 deletions code/stat159lambda/classification/svm/svm_cross_validate.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
from __future__ import print_function, division
import numpy as np
from sklearn.cross_validation import KFold
from sklearn.metrics import accuracy_score
from stat159lambda.classification import design_matrix as dm
from stat159lambda.classification.svm import svm
from stat159lambda.classification import partition_volumes as pv
from stat159lambda.config import REPO_HOME_PATH, NUM_VOXELS
from stat159lambda.linear_modeling import linear_modeling as lm
from stat159lambda.utils import data_path as dp


voxels_sorted_by_t_statistic = lm.VoxelExtractor(1, 'int-ext').t_stat()
# num_features_values = range(100, NUM_VOXELS/100, 100)
# for num_features in num_features_values:
voxel_feature_indices = voxels_sorted_by_t_statistic[:1000]
design_matrix = dm.DesignMatrix(dp.get_smoothed_2d_path(1, 4),
pv.get_train_indices(), voxel_feature_indices)

X_train = design_matrix.get_design_matrix()
y_train = np.array(design_matrix.get_labels())

cv_accuracies = []
for train, test in KFold(len(X_train), 5):
X_cv_train = X_train[train, :]
y_cv_train = y_train[train]
X_cv_test = X_train[test, :]
y_cv_test = y_train[test]
model = svm.Classifier(X_cv_train, y_cv_train)
model.train()
y_predicted = model.predict(X_cv_test)
cv_accuracies.append(accuracy_score(y_predicted, y_cv_test))

print(np.mean(cv_accuracies))

0 comments on commit 110593c

Please sign in to comment.