[pymvpa] mvpa noob questions...
Ray Schumacher
subscriber100 at rjs.org
Thu Sep 27 21:53:11 UTC 2012
We have a study dataset with subject, label (stroke/no stroke), and
60 features; I'd like to make an SVM classifier and test its
significance, most important features, etc. I get results, but also a
few cryptic (to me) errors and some warnings.
Also, if I try NFoldPartitioner() rather than HalfPartitioner(...) I
get a traceback about missing chunks, so it seems I need to set them
explicitly?
I also can't get searchlight set up correctly.
My test code, based on the tutorial:
from mvpa2.tutorial_suite import *
d = file(r"C:\temp\test3_redo.csv").readlines()
lol= [x[:-1].split(",") for x in d]
print lol[0]
## the list of subject names
subjects = [r[0] for r in lol]
## the feature data
dat = [[float(c) for c in row[6:]] for row in lol]
labels = [r[1] for r in lol]
tmp = [l.replace('Normal', '0') \
for l in [l.replace('Stroke', '1') for l in labels]]
## the truth values
labels = [int(x) for x in tmp]
ds = Dataset(samples=dat)
ds.sa['subject'] = subjects
ds.sa['targets'] = labels
print ds, '\n'
clf = LinearCSVMC()
cvte = CrossValidation(clf, HalfPartitioner(count=2,
selection_strategy='random', attr='subject'),
errorfx=lambda p, t: np.mean(p == t), enable_ca=['stats'])
cv_results = cvte(ds)
print cvte.ca.stats.as_string(description=True)
print cvte.ca.stats.matrix
aov = OneWayAnova()
f = aov(ds)
print 'aov:', f
fsel = SensitivityBasedFeatureSelection(
OneWayAnova(),
FixedNElementTailSelector(5, mode='select', tail='upper'))
fsel.train(ds)
ds_p = fsel(ds)
print '\nfixed:', ds_p.shape
results = cvte(ds_p)
print np.round(cvte.ca.stats.stats['ACC%'], 1)
print cvte.ca.stats.matrix
print
fsel = SensitivityBasedFeatureSelection(
OneWayAnova(),
FractionTailSelector(0.05, mode='select', tail='upper'))
fclf = FeatureSelectionClassifier(clf, fsel)
cvte = CrossValidation(fclf, HalfPartitioner(count=2,
selection_strategy='random', attr='subject'),
enable_ca=['stats'])
results = cvte(ds)
print 'fractional', np.round(cvte.ca.stats.stats['ACC%'], 1)
Errors:
'gcc' is not recognized as an internal or external command,
operable program or batch file.
C:\Python27\lib\site-packages\scipy\integrate\quadpack.py:288:
UserWarning: Extremely bad integrand behavior occurs at some points of the
integration interval.
warnings.warn(msg)
C:\Python27\lib\site-packages\mvpa2\misc\errorfx.py:102:
RuntimeWarning: invalid value encountered in divide
([0], np.cumsum(t)/t.sum(dtype=np.float), [1]))
C:\Python27\lib\site-packages\scipy\stats\stats.py:274:
RuntimeWarning: invalid value encountered in double_scalars
return np.mean(x,axis)/factor
C:\Python27\lib\site-packages\mvpa2\misc\errorfx.py:106:
RuntimeWarning: invalid value encountered in divide
([0], np.cumsum(~t)/(~t).sum(dtype=np.float), [1]))
C:\Python27\lib\site-packages\mvpa2\clfs\transerror.py:678:
RuntimeWarning: invalid value encountered in divide
stats['PPV'] = stats['TP'] / (1.0*stats["P'"])
C:\Python27\lib\site-packages\mvpa2\clfs\transerror.py:679:
RuntimeWarning: invalid value encountered in divide
stats['NPV'] = stats['TN'] / (1.0*stats["N'"])
C:\Python27\lib\site-packages\mvpa2\clfs\transerror.py:680:
RuntimeWarning: invalid value encountered in divide
stats['FDR'] = stats['FP'] / (1.0*stats["P'"])
C:\Python27\lib\site-packages\mvpa2\measures\anova.py:111:
RuntimeWarning: invalid value encountered in divide
msb = ssbn / float(dfbn)
Output:
['S001', 'Stroke', 'Structural', 'DL', 'A3+4', 'L', '33175.5142',
'14408.18074', '10849.84165', '8059.24706', '8010.452299', '14',
'45', '40', '55', '50', '56060.79132', '24908.80989', '16687.6343',
'10154.6501', '7901.745475', '14', '45', '40', '50', '30',
'64268.60726', '12620.57744', '992.4884881', '825.5158143',
'751.0024413', '19', '27', '33', '67', '40', '2170.966193',
'1879.560843', '1741.498856', '1340.718439', '959.5283252', '32',
'15', '19', '42', '23', '0', '0', '0', '0', '0', '0', '0', '0', '0',
'0', '13424.62045', '9142.678538', '8140.41212', '6403.125282',
'5807.041425', '15', '19', '66', '32', '41']
<Dataset: 62x60 at float64, <sa: subject,targets>>
WARNING: Only 1 sets have estimates assigned from 2 sets. ROC
estimates might be incorrect.
* Please note: warnings are printed only once, but underlying
problem might occur many times *
----------.
predictions\targets 0.0 1
`------ ---- ---- P'
N' FP FN PPV NPV TPR SPC FDR MCC F1 AUC
0.0 0 23 23
39 23 24 0 0.38 0 0.39 1 -0.61 0 nan
1 24 15 39
23 24 23 0.38 0 0.39 0 0.62 -0.61 0.39 nan
Per target: ---- ----
P 24 38
N 38 24
TP 0 15
TN 15 0
Summary \ Means: ---- ---- 31 31 23.5 23.5 0.19 0.19 0.2 0.2
0.81 -0.61 0.19 nan
CHI^2 25.68 p=1.1e-05
ACC 0.24
ACC% 24.19
# of sets 2
Statistics computed in 1-vs-rest fashion per each target.
Abbreviations (for details see http://en.wikipedia.org/wiki/ROC_curve):
TP : true positive (AKA hit)
TN : true negative (AKA correct rejection)
FP : false positive (AKA false alarm, Type I error)
FN : false negative (AKA miss, Type II error)
TPR: true positive rate (AKA hit rate, recall, sensitivity)
TPR = TP / P = TP / (TP + FN)
FPR: false positive rate (AKA false alarm rate, fall-out)
FPR = FP / N = FP / (FP + TN)
ACC: accuracy
ACC = (TP + TN) / (P + N)
SPC: specificity
SPC = TN / (FP + TN) = 1 - FPR
PPV: positive predictive value (AKA precision)
PPV = TP / (TP + FP)
NPV: negative predictive value
NPV = TN / (TN + FN)
FDR: false discovery rate
FDR = FP / (FP + TP)
MCC: Matthews Correlation Coefficient
MCC = (TP*TN - FP*FN)/sqrt(P N P' N')
F1 : F1 score
F1 = 2TP / (P + P') = 2TP / (2TP + FP + FN)
AUC: Area under (AUC) curve
CHI^2: Chi-square of confusion matrix
LOE(ACC): Linear Order Effect in ACC across sets
# of sets: number of target/prediction sets which were provided
[[ 0 23]
[24 15]]
aov: <Dataset: 1x60 at float64, <fa: fprob>>
fixed: (62, 5)
WARNING: Obtained degenerate data with zero norm for training of
<LinearCSVMC>. Scaling of C cannot be done.
61.3
[[ 0 0]
[24 38]]
fractional 61.3
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.alioth.debian.org/pipermail/pkg-exppsy-pymvpa/attachments/20120927/7e21d69b/attachment.html>
More information about the Pkg-ExpPsy-PyMVPA
mailing list