Development Changelog¶
This changelog only lists rather macroscopic changes to PyMVPA. The full VCS changelog for 2.x series of PyMVPA is available here:
Note
You could find relevant information on 0.4.x series at http://v04.pymvpa.org .
In addition there is also a somewhat unconventional visual changelog.
‘Closes’ and ‘Fixes’ statement IDs refer to the Debian and Github bug tracking systems accordingly and can be queried by visiting the URLs:
http://bugs.debian.org/<closed bug id>
https://github.com/PyMVPA/PyMVPA/issues/<fixed bug id>
Releases¶
2.6.6 (???, ??? ?? 2018)
A bugfix release
- Fixes -
- New functionality -
- Enhancements -
2.6.5 (Tue, Jun 26, 2018)
A minor release with some bugfixes and new exciting functionality
- Fixes - Exception message handling in niml module - Sort unique values in the fallback handling of AttrCollection.unique - prep-afni-surf should be compatible with matplotlib 2.0.0 - Scatter plot should be more robust to degenerate data
- New functionality
-
ConnectivityHyperalignment
- Enhancements
-
preallocate_output
parameter forSearchlight
2.6.4 (Mon, Jan 29 2018)
A bugfix release
Fixes - compatibility with
pywt
>= 0.4 - compatibility withscipy.stats
>= 0.17.0 forchisqprob
Enhancements - make
h5save
“robust” in the presence of file locks - wait for a whileto acquire the lock
- consult
pkg_resources
about versions of external packages if no__version__
was found
- consult
2.6.3 (Fri, Nov 03 2017)
Minor bugfix release – getting ready for conda-forge
- Fixes - variety of tune ups to test to pass all around - minor fixes to scatter and chunks plots
2.6.2 (Tue, Oct 31 2017)
Primarily a bugfix release
Fixes - fixed scaling in ProcrusteanMapper (gh-545). So if you are using
Hyperalignment, you better re-pre-process, and do not mix results/transformations across versions of the PyMVPA
- numpy 1.13.1 compatibility fixes
- documentation: urls and building fix ups
- some fixes for Python3 compatibility in hdf5 (h5save/h5load) support
- use single line affine matrix representation in pymvpa2-prep-afni-surf
- saving large .niml files should not crash now
New functionality -
mean_tpr()
andmean_fnr()
error functions (to be used in disbalanced datasets)
2.6.1 (Fri, Apr 14 2017)
Primarily a bugfix release
Fixes
- Deprecation: fixed typo in
manhattan_distance
- Documentation: various outdated links and project names fixed
- Removed spurious quote within command line invocation of
prep-afni-surf
- Fixed computation of the edge lengths on the surface, which could have resulted in slightly incorrect surface searchlight sizes
- Deprecation: fixed typo in
New functionality
CDist
for cross-validated dissimilarity measures computation
Enhancements
Hyperalignment
-output_dim
option could be used to perform dimensionality reductionvia SVD while composing the common space
nproc
andjoblib_backend
parameters could be used to parallelize the last step of the alignment
2.6.0 (Sat, 26 Aug 2016)
Primarily a bugfix release with some added new functionality. People contributed code to the release: Matteo Visconti dOC, Yaroslav Halchenko, Nikolaas N. Oosterhof, Feilong Ma, Christopher J. Markiewicz, Swaroop Guntupalli.
- IMPORTANT possibly backward-incompatible fixes
- Dataset’s
vstack()
andhstack()
now by default would drop those feature or sample (fa
,sa
) attributes which do not have the same value across all datasets (“drop_nonunique”). Previous behaviour was to update aggregated collections, so the attribute value of the last dataset would have been stored in the stacked dataset. Such behaviour could be brought back byfa="update"
forvstack
or similar value forsa="update"
forhstack
calls. If you find that somesa
/fa
you have relied on using in your code is no longer available after stacking, verify that you did intend to maintain the “last known” value, and adjust argument in stacking function to “update”.
- Dataset’s
- Fixes
- Fixed minor bug in computing ico linear divisions while working with surfaces
- Handling of
ref_ds
inSearchlightHyperalignment
- Compatibility fixes for
scipy
0.18.0 andnibabel
2.1.0.
- New functionality
pymvpa2 scatter
command line andscatter
module to scatter plot datasets and nifti volumes, with coloring based on spatial location (see e.g. OHBM12 poster for an example, proper demo is coming)
- Enhancements
- Allow for “4D” mri mask volumes with degenerate time dimension (e.g. coming from AFNI)
pymvpa2 ttest
could operate now on h5save’d datasets- It is possible now to
h5save
trained Hyperalignment instances Balancer
andAttributePermutator
now gotrng
argument to seed RNG. Please use anint
as a seed specification if you want random selections/permutations be consistent across searchlights
- IMPORTANT possibly backward-incompatible fixes
2.5.0 (Thu, 12 May 2016)
- Fixes
- Various python3 related small fixes
- Minor fix allowing adhoc searchlights (e.g. gnbsearchlight) to work with CustomPartitioner
- Fixed SmartVersion to not infinitely loop upon receiving an awkward version string
- New functionality
SearchlightHyperalignment
to carry out full-datset/brain hyperalignment of functional data while honoring spatial neighborhoods. See Guntupalli et al., Cerebral Cortex (2016) A Model of Representational Spaces in Human Cortex for more informationRegression
measure to compute regularized regression (Ridge or Lasso) on the computed neural dissimilarity matrixSurfaceRingQueryEngine
- Enhancements
- The
ofmotionqc
command line command has been renamed toplotmotionqc
. It no longer requires a dataset formatted in OpenFMRI-style, but works with any organization of input data - SplitRFE docstring example reordered suggested mappers (l2 -> abs -> mean)
- Show only summary of representation of internal _src2aux of VolumeMaskDictionary object, which otherwise could be too big to print
- The
- Fixes
2.4.3 (Tue, 15 Mar 2016)
- Fixes
- Fixed memory leaking in libsvm bindings introduced in 2.4.2 (gh-443)
- Avoid overriding parameters defined in subclasses with the ones from super class
- Address freshish deprecations (warnings) in sklearn, scipy, etc
- Workaround in the test for numpy’s corrcoef issue resulting in corrcoef a bit outside of [-1, 1] range
- Fixes
2.4.2 (Tue, 8 Mar 2016)
- Fixes
- Important:
Reverse mapping of some chained Flatten/StaticSelection mappers did not
work correctly e.g. if you selected some features from already masked
fmri_dataset. This could have resulted in incorrect cluster counts by
GroupClusterThreshold
. Please recreate your datasets and re-estimate GroupClusterThreshold if that was the case for you - ad-hoc searchlights (gnb, m1nn) can now operate with partitioners which
leave some samples out of training and testing sets. Also
splitter
argument was added to them for greater flexibility - Due to the bug in OpenfMRI datasets’ TR within NIfTIs being hardcoded to
wrong 1.0, so
scan_key.txt
will now be consulted if TR is 1 in the .nii* - Compatibility with
numpy
1.10 fixes CachedQueryEngine
acquired .ids making it compatible with some ad-hoc searchlightsFeatureSelection
acquired__iadd__
fixing the incorrect behavior upon reverse after a sequence of feature selections
- Important:
Reverse mapping of some chained Flatten/StaticSelection mappers did not
work correctly e.g. if you selected some features from already masked
fmri_dataset. This could have resulted in incorrect cluster counts by
- Deprecations/removal
Hamster
is gone.
- Enhancements
- Bundled version of libsvm updated to 3.12. Now includes maxiter setting which prevents infinite looping which can happen in some rare cases
- A swarm of stylistic improvements (“is not”, PEP8, etc) which should not affect functionality but could result in more robust operation
CrossValidation
can now operate with a None generator (i.e. partitioner) using solelySplitter
to generate a single split on original dataset. Provides easier means for “cross-classification”M1NNSearchlight
can now do classification based on correlation distance (just providedfx=one_minus_correlation
to kNN)- libsvm bindings for SVM were refactored to interface via svmc not _svmc interface, which made them also compatible with swig 3.x
to_npz()
andfrom_npz()
to interface Datasets through NumPy’s npz files- Variety of PEP8 and other tune ups for more readable code
SplitRFE
can now work with static measures (e.g.OneWayAnova
) andBinaryFxFeaturewiseMeasure
. So do feature selection with nested cross-validation without double-dipping!
- New functionality
FactorialPartitioner
for factorial designs to cross-validate across sub-ordinate category samples (more efficient/avoids previously recommend ChainMapper of NFoldPartitioner and Sifter)
- Fixes
2.4.1 (Wed, 18 Nov 2015)
- New functionality
gifti
can write GIFTI files that contain both dataset samples and surface anatomy (vertices and faces). Such GIFTI files can be read by FreeSurfer.
- Deprecations/removal
tools/niils
– tool removed, since the functionality was moved intonibabel
under the namenib-ls
- Drop support for nibabel < 2.0.0
- Enhancements
- “Native” use of
duecredit
to provide citations for PyMVPA itself and functionality/methods it implements. - Unified use of os.path.join as pathjoin.
ProcrusteanMapper
computes reconstruction now more efficiently (just a transpose with proper scaling) in case of non-oblique transformations.
- “Native” use of
- Refactorings/misc changes
ProcrusteanMapper
now just returns transpose in reverse if transformation is non-oblique (instead of an explicit inverse).
- Fixes
- 2.4.0 was released with incorrect
__version__
(as 2.3.1) - Fixes to
ofmotionqc
command implementation - Variety of fixes for compatibility with recent matplotlib, python3
- Fixes to SVDMapper in reverse when projection is not a matrix
- 2.4.0 was released with incorrect
- New functionality
2.4.0 (Mon, 11 May 2015)
- New functionality
- Support for CoSMoMVPA (http://cosmomvpa.org) in
cosmo
providing dataset input/output (cosmo_dataset()
andmap2cosmo()
) and neighborhood input (CosmoQueryEngine
). This allows for for running searchlights (mvpa2.datasets.cosmo.CosmoSearchlight
) on data from CoSMoMVPA (fMRI and MEEG). remove_nonfinite_features()
removes features with non-finite values, i.e. NaNs or Infs, for any sample.binomial_proportion_ci()
for computing confidence intervals on proportions of Bernoulli trial outcomes.- New mapper for removing sample means from features:
MeanRemoval
- New algorithm for statistical evaluation of clusters in accuracy maps
of group-based searchlight classification analyses. This is essentially
an improved implementation of Stelzer et al., NeuroImage, 2013:
GroupClusterThreshold
- New identity mapper. Does nothing, but goes were only mappers can go.
- Simplified selection of samples/feature in a dataset. One can now specify sets of attribute values to define sample/feature subsets.
- IO adaptor for OpenFMRI-formated datasets:
OpenFMRIDataset
. Load arbitrary bits from such a dataset, or automatically build event-related dataset (optionally with NiPy-based HRF-modeling).tutorial_data_25mm
was converted to OpenFMRI layout and extended also with1slice
flavor. - New command line command to generate a motion plot for an OpenFMRI-formated dataset.
- New convenience functions for boxplots and outlier detection.
- Reincarnated (similar functionality was removed for 2.0 release)
convenience methods (
match()
andselect()
) to ease selecting parts of a dataset - New command line component
ttest
to compute a simple T-test across dataset samples.
- Support for CoSMoMVPA (http://cosmomvpa.org) in
- Enhancements
ProductFlattenMapper
accepts explicit names of factors in the constructor.- HollowSphere() can now, optionally, include the center feature.
fmri_dataset()
no longer stores original copy of the NIfTI file header – it converts it todict
representation to remain portable. Usestrip_nibabel()
to convert old datasets to new format if/when necessary.- Datasets created with
fmri_dataset()
do no longer contain instances of NiBabel classes. This improves robustness of re-loading serialized datasets in environments with changing NiBabel version. All previous functionality remains available. Dataset now contain an additionalimgaffine
attribute with the affine transformation of the source image.
- Fixes
Hyperalignment
with regularization (alpha != 1.0) was producing incorrect transformations because they were driven by offsets of the last subject. Fixed by not “auto_train”ing regularization projection.plot_lightbox()
should take a slice index from the last dimension, not the leading one if noslices
argument was provided.- Improved Python3k compatibility in
state
,tests
, andstats
modules, and in libsvmlrc msvc building. - Partial fix for compatibility with ancient scipy on SPARC using
cosmo
. - Various fixes for example scripts and documentation snippets.
SKLTransformer
can now deal withtransform()
implementations that do not support ay
argument.
- New functionality
2.3.1 (Tue, 20 May 2014)
Primarily a bugfix release pushed out to avoid mvpa2.suite meltdown if new scipy 1.4.0 is used.
- API changes
- Deprecation:
Parameter
now usesconstraints
argument of typeConstraint
instead of stringallowedtype
.allowedtype
argument will be removed completely in the future 2.4 release.
- Deprecation:
- New changes
dummies
now provides utterly usefulRandomClassifier
and others for code testing which could also be used to verify absent double-dipping etc.
- Enhancements
FxMapper
now will provide consistent order of groups of items. It also got a new argumentorder
with available value of ‘occurrence’ to that groups would get ordered by their occurance in the original dataset.
- Fixes
CorrStability
should be able to deal with other sample attributes (not only ‘targets’) and should divide by variance correctly to provide correlation coefficient as output.- robustify check scipy’s rdist which should avoid crash upon import of mvpa2.suite because of stripped down scipy 1.4.0 API.
- various typos in docstrings (we do welcome contributions ;) ).
- API changes
2.3.0 (Thu, 5 March 2014)
- Warning: Due to a significant number of new features and some internal changes, loading of HDF5 files saved with previous versions might be impaired.
- New functionality (>73 commits)
- Multi-threaded, surface-based searchlight queryengine
disc_surface_queryengine()
supporting as output space either surfaces (SurfaceVerticesQueryEngine
; recommended) or volumes (SurfaceVoxelsQueryEngine
). FlatSurfacePlotter
supporting flattened cortical surfaces.- I/O support for AFNI NIML (dset,
afni_niml_dset
; annotation,afni_niml_annot
), AFNI 1D datasets (afni_suma_1d
), SUMA surface specification (afni_suma_spec
), Freesurfer ASCII surfaces (surf_fs_asc
), GIFTI surfaces (surf_gifti
through nibabel). Input support for Caret binary surfaces (surf_caret
), EEGlab ASCII (mvpa2.datasets.eeglab.eeglab_dataset()
), AFNI NIML ( ROI,afni_niml_roi
). - Experimental support for saving AttrDataset files directly to NIML format
using
niml
. - Freesurfer/AFNI/SUMA preprocessing wrapper script
pymvpa2-prep-afni-surf
for surface-based analyses. - Winner-take-all measures
winner
. - New command line interface that provides access to the most commonly used functionality (dataset creation, pre-processing, cross-vlaidation, searchlights and data export).
StatsmodelsGLMMapper
andNiPyGLMMapper
.- Spectral filtering mapper
IIRFilter
.
- Multi-threaded, surface-based searchlight queryengine
- Enhancements (>130 commits)
fmri_dataset()
load support for AFNI NIFTI volumes with time in the fifth dimension (data is automagically squeezed to 4D).map2nifti()
setscal_
fields to correspond to the range of the data.- Many parts of the tutorial were reworked, set of examples expanded, and also converted to IPython notebooks.
eventrelated()
extended to output GLM regression fits as features from HRF models (relying on NiPy for GLM modeling).- Class parameters now support programatic validation of values, auto-generated documentation and improved error messages.
- More informative progress bar for long running processes, such as searchlights.
- Replace all (broken) implementations for similarity structure analyses
with new measures for computing pairwise pattern distances, and their
consistency, or similarity to a target structure
(
rsa
). - New examples to show integration with scikit-learn implementations of classification, regression, and data transformation algorithm.
- Fixes (>88 commits)
- Makefile fetch-data retrieves the data correctly.
- HDF5 backend fixes to deal with nested/recursive structures and higher tolerance in loading HDF5 from older version.
2.2.0 (Sun, Sep 16 2012)
- New functionality (14 commits)
- New HDF5-based storage backend for
Searchlight
the can significantly speed up serialization of large result dataset in parallelized computations. - New fast searchlight
M1NNSearchlight
(and helpersphere_m1nnsearchlight()
) to run mean-1-nearest-neighbor searchlights. - New mappers for adding an axis to a dataset
(
AddAxisMapper
), and for transposing a dataset (TransposeMapper
). - Improved implementation of SciPy’s
ttest_1samp()
with support for masked arrays and alternative hypotheses. - Individual tutorial chapters are now available for download as IPython
notebooks. A
rst2ipynb
converter is available intools/
. - New
pymvpa2-tutorial
command line utility to start a PyMVPA tutorial session, either in a console IPython session, or using the IPython notebook server. - New wrapper functions for data generators/loaders in
sklearn.datasets
, available inmvpa2.datasets.sources.sklearn_data
.
- Enhancements (89 commits)
- Initial Python 3 compatibility (spear-headed by Tiziano Zito).
- Bayesian hypothesis testing with
BayesConfusionHypothesis
now supports literal hypotheses specification, custom hypotheses subsets, and computing of posterior probabilities. - Allow for accessing fitted distributions in
MCNullDist
. - Extensions and improvements to the tutorial chapter on statistical evaluation.
- Expose distance function as a property
dfx
ofkNN
. - Extended
Sifter
with ability to discard unbalanced partitions. h5save()
now creates missing directories automatically by default.- Dedicated training for
Hyperalignment
, and new auto-train capability. BayesConfusionHypothesis
now computes optional posterior probabilities, and supports hypothesis definitions using literal labels.
- API changes
- All command line tools have been renamed to have a consistent ‘pymvpa2-‘ prefix.
- Fixes (77 commits)
- HDF5 now properly stores object-type ndarray, where it the array shape was unintentionally modified on-load before (Fixes #84).
- HDF5 can now reconstruct ‘builtin’ objects (Fixes #86).
- Check value data type and convert to float when collecting performance statistics to avoid numerical problems.
- Do not fail in
BayesConfusionHypothesis
when a dataset does not provide class labels.
2.1.0 (Fri, June 29 2012)
- Fixes
mask2slice()
failed to convert an array ofFalse
values intoslice(None, 0, None)
(Fixes #56).- A number of fixes to the HDF5 IO code that ignored parts of an object’s
state when custom
__reduce__()
implementations were used (Fixes #42), and had problems storing metaclass types (Fixes #78). - Proper single quotes in documentation code snippets within PDFs.
- Memory leak (model pointer) in LIBSVM bindings.
- Enhancements
- All searchlight implementations can now optionally store the IDs of all
features for each generated ROI (conditional attr.
roi_feature_ids
) - Add
scatter_neighborhoods()
to aid sparse sampling of spaces. - Add
ConfusionMatrixError
to compute confusion matrices with an error function interface (e.g. forCrossValidation(errorfx=...)
). This class existed for a long time, but was hidden in the unit tests. - Add
Confusion
to compute confusion matrices with a Node interface (e.g. forCrossValidation(postproc=...)
). This is useful if confusion matrices are necessary as an intermediate result and further processing with other nodes is desired.
- All searchlight implementations can now optionally store the IDs of all
features for each generated ROI (conditional attr.
- New functionality
- Add
BayesConfusionHypothesis
to perform Bayesian hypothesis testing of multi-class confusion statistics. This is useful to assess the likelihood of a particular (or all possible) grouping of classes being distinguishable. - Add
FxyMapper
to perform arbitrary computations involving two datasets. - Add
CombinedMapper
to run a dataset through a set of mappers and combine their outputs. - Add
UnivariateStatsModels
a wrapper for using models from the statsmodels package as a FeaturewiseMeasure. - Add
dCOV
anddcorcoef()
to quantify independence of (multivariate) signals.
- Add
- API changes
- Deprecating
GLM
that is now implemented with UnivariateStatsModels. This deprecated GLM class no longer supports thezstat
calculation, and none of its previous conditional attributes are available anymore.
- Deprecating
- Fixes
2.0.1 (Tue, Mar 27 2012)
Primarily a bugfix release
- Fixes (21 BF commits)
- HDF5 storage – handle loading of objects with bound
builtin_function_or_method
. - Use system-wide
autosummary/generate.py
for sphinx >= 1.1.2 (Closes: #658593). ConditionalAttribute
should not loose value in deepcopy when default off (Fixes #63).- Correct handling of scalar mean/std values for
ZScoreMapper
. - MRI data import via _img2data now works with unicode filenames (Fixes #60).
- Should work with IPython >= 0.11 now (Fixes #59).
- Various small fixes to improve tests and functionality.
- Fix
SMLR
segfaults on Windows (Thanks cgohlke for the patch).
- HDF5 storage – handle loading of objects with bound
- Enhancements (29 ENH, OPT, and NF commits)
FxMapper
calls functions natively (instead of a slow row/column at a time) if they carryaxis
as the 2nd argument. Provides tremendous speed up formean_sample()
etc.xrandom_unique_combinations()
generator for random unique combinations.dual_gaussian()
made more robust by not handling negative values for the standard deviations.dual_positive_gaussian()
.- Expose “sensitivities” for
PLR
. NFoldPartitioner
float option forcvtype
and intelligent behavior on ‘random’ limited by ‘count’ given a large number of folds.- Add few additional learners from
sklearn
to the warehouses: ExtraTrees, RandomForest, LassoLarsIC. __repr__
for :class:`Partitioner`s.- Add new performance metric – F1 score – in the confusion matrix summary stats.
CachedQueryEngine
does not rely now on id but on the exact value of the query parameters (converted to hashable types). Before it could behave incorrectly on rare occasions.
- API changes
- Deprecating
.splitattr
if favor of.attr
inmvpa2.generators.partition.Partitioner
- Deprecating
- Fixes (21 BF commits)
2.0.0 (Mon, Dec 19 2011)
This release aggregates all the changes occurred between official releases in 0.4 series and various snapshot releases (in 0.5 and 0.6 series). To get better overview of high level changes see release notes for 0.5 and 0.6 as well as summaries of release candidates below
- Fixes (23 BF commits)
- Significance level in the right tail was fixed to include the value tested – otherwise resulted in optimistic bias (or absurdly high significance in improbable case if all estimates having the same value).
- Compatible with the upcoming IPython 0.12 and renamed sklearn (Fixes #57).
- Do not double-train
slave
classifiers while assessing sensitivities (Fixes #53).
- Enhancements (30 ENH + 3 NF commits)
- Resolving voting ties in kNN based on mean distance, and randomly in SMLR.
kNN
‘sca.estimates
now contains dictionaries with votes for each class.- Consistent zscoring in
Hyperalignment
.
- Fixes (23 BF commits)
2.0.0~rc5 (Wed, Oct 19 2011)
- Major: to allow easy co-existence of stable PyMVPA 0.4.x, 0.6
development
mvpa
module was renamed into mod:mvpa2
. - Fixes
- Compatible with the new Shogun 1.x series.
- Compatible with the new h5py 2.x series.
mvpa-prep-fmri
– various compatibility fixes and smoke testing.- Deepcopying
SummaryStatistics
during __add__.
- Enhancements
- Tutorial uses
mvpa2.tutorial_suite
now. - Better suppression of R warnings when needed.
- Internal attributes of many classes were exposed as properties.
- More unification of
__repr__
for many classes.
- Tutorial uses
- Major: to allow easy co-existence of stable PyMVPA 0.4.x, 0.6
development
0.6.0~rc4 (Wed, Jun 14 2011)
- Fixes
- Finished transition to
nibabel
conventions inplot_lightbox
. - Addressed
matplotlib.hist
API change. - Various adjustments in the tests batteries (
nibabel
1.1.0 compatibility, etc)
- Finished transition to
- New functionality
- Explicit new argument
flatten
to from_wizard – default behavior changed if mapper was provided as well
- Explicit new argument
- Enhancements
- Elaborated
__str__
and__repr__
for some Classifiers and Measures
- Elaborated
- Fixes
0.6.0~rc3 (Thu, Apr 12 2011)
- Fixes
- Bugfixes regarding the interaction of FlattenMapper and BoxcarMapper that affected event-related analyses.
Splitter
now handles attribute valueNone
for splitting properly.GNBSearchlight
handling ofroi_ids
.- More robust detection of mod:
scikits.learn
andnipy
externals.
- New functionality
- Added a
Repeater
node to yield a dataset multiple times andSifter
node to exclude some datasets. Consequently, the “nosplitting” mode ofSplitter
got removed at the same time. tools/niils
– little tool to list details (dimensionality, scaling, etc) of the files in nibabel-supported formats.
- Added a
- Enhancements
- Numerous documentation fixes.
- Various improvements and increased flexibility of null distribution estimation of Measures.
- All attribute are now reported in sorted order when printing a dataset.
fmri_dataset
now also stores the input image type.Crossvalidation
can now take a customSplitter
instance. Moreover, the default splitter of CrossValidation is more robust in terms of number and type of created splits for common usage patterns (i.e. together with partitioners).CrossValidation
takes any custom Node aserrorfx
argument.ConfusionMatrix
can now be used as anerrorfx
in Crossvalidation.LOE(ACC): Linear Order Effect in ACC
was added toConfusionMatrix
to detect trends in performances across splits.- A
Node
s postproc is now accessible as a property. RepeatedMeasure
has a new ‘concat_as’ argument that allows results to be concatenated along the feature axis. The default behavior, stacking as multiple samples, is unchanged.Searchlight
now has the ability to mark the center/seed of an ROI in with a feature attribute in the generated datasets.debug
takesargs
parameter for delayed string comprehensions. It should reduce run-time impact ofdebug()
calls in regular, non-O
mode of Python operation.- String summaries and representations (provided by
__str__
and__repr__
) were made more exhaustive and more coherent. Additional properties to access initial constructor arguments were added to variety of classes.
- Internal changes
- New debug target
STDOUT
to allow attaching metrics (e.g. traceback, timestamps) to regular output printed to stdout - New set of decorators to help with unittests
@nodebug
to disable specific debug targets for the duration of the test.@reseed_rng
to guarantee consistent random data given initial seeding.@with_tempfile
to provide a tempfile name which would get removed upon completion (test success or failure)
- Dropping daily testing of
maint/0.5
branch – RIP. Collection
s were provided with adequate(deep|)copy
. AndDataset
was refactored to useCollection
scopy
method.update-*
Makefile rules automatically should fast-forward correspondingwebsite-updates
branchMVPA_TESTS_VERBOSITY
controls alsonumpy
warnings now.Dataset.__array__
provides original array instead of copy (unless dtype is provided)
- New debug target
Also adapts changes from 0.4.6 and 0.4.7 (see corresponding changelogs).
- Fixes
0.6.0~rc2 (Thu, Mar 3 2011)
- Various fixes in the mvpa.atlas module.
0.6.0~rc1 (Thu, Feb 24 2011)
- Many, many, many
- For an overview of the most drastic changes see constantly evolving release notes for 0.6
0.5.0 (sometime in March 2010)
This is a special release, because it has never seen the general public. A summary of fundamental changes introduced in this development version can be seen in the release notes.
Most notably, this version was to first to come with a comprehensive two-day workshop/tutorial.
0.4.7 (Tue, Mar 07 2011) (Total: 12 commits)
A bugfix release
- Fixed
- Addressed the issue with input NIfTI files having
scl_
fields set: it could result in incorrect analyses and map2nifti-produced NIfTI files. Now input files account for scaling/offset ifscl_
fields direct to do so. Moreover upon map2nifti, those fields get reset. doc/examples/searchlight_minimal.py
- best error is the minimal one
- Addressed the issue with input NIfTI files having
- Enhancements
GNB
can now tolerate training datasets with a single labelTreeClassifier
can have trailing nodes with no classifier assigned
- Fixed
0.4.6 (Tue, Feb 01 2011) (Total: 20 commits)
A bugfix release
- Fixed (few BF commits):
- Compatibility with numpy 1.5.1 (histogram) and scipy 0.8.0 (workaround for a regression in legendre)
- Compatibility with libsvm 3.0
PLR
robustification
- Enhancements
- Enforce suppression of numpy warnings while running unittests. Also setting verbosity >= 3 enables all warnings (Python, NumPy, and PyMVPA)
doc/examples/nested_cv.py
example (adopted from 0.5)- Introduced base class
LearnerError
for classifiers’ exceptions (adopted from 0.5) - Adjusted example data to live upto nibabel’s warranty of NIfTI standard-compliance
- More robust operation of MC iterations – skip iterations where classifier experienced difficulties and raise an exception (e.g. due to degenerate data)
- Fixed (few BF commits):
0.4.5 (Fri, Oct 01 2010) (Total: 27 commits)
A bugfix release
- Fixed (13 BF commits):
- Compatible with LIBSVM >= 2.91 (Closes: #583018)
- No string exceptions raised (Python 2.6 compatibility)
- Setting of shrinking parameter in
sg
interface - Deducing number of SVs for SVR (LIBSVM)
- Correction of significance in the tails of non-parametric tests
- Miscellaneous:
- Development repository moved to http://github.com/PyMVPA/PyMVPA
- Fixed (13 BF commits):
0.4.4 (Mon, Feb 2 2010) (Total: 144 commits)
Primarily a bugfix release, probably the last in 0.4 series since development for 0.5 release is leaping forward.
- New functionality (19 NF commits):
GNB
implements Gaussian Naïve Bayes Classifier.read_fsl_design()
to read FSL FEAT design.fsf files (Contributed by Russell A. Poldrack).SequenceStats
to provide basic statistics on labels sequence (counter-balancing, autocorrelation).- New exceptions
DegenerateInputError
andFailedToTrainError
to be thrown by classifiers primarily during training/testing. - Debug target
STATMC
to report on progress of Monte-Carlo sampling (during permutation testing).
- Refactored (15 RF commits):
- To get users prepared to 0.5 release, internally and in some
examples/documentation, access to states and
parameters is done via corresponding collections, not from the
top level object (e.g.
clf.states.predictions
instead of soon-to-be-deprecatedclf.predictions
). That should lead also to improved performance. - Adopted copy.py from python2.6 (support Ellipsis as well).
- To get users prepared to 0.5 release, internally and in some
examples/documentation, access to states and
parameters is done via corresponding collections, not from the
top level object (e.g.
- Fixed (38 BF commits):
- GLM output does not depend on the enabled states any more.
- Variety of docstrings fixed and/or improved.
- Do not derive NaN scaling for SVM’s C whenever data is degenerate (lead to never finishing SVM training).
sg
:- KRR is optional now – avoids crashing if KRR is not available.
- tolerance to absent
set_precompute_matrix
in svmlight in recent shogun versions. - support for recent (present in 0.9.1) API change in exposing debug levels.
- Python 2.4 compatibility issues:
kNN
andIFS
- New functionality (19 NF commits):
0.4.3 (Sat, 5 Sep 2009) (Total: 165 commits)
- Online documentation editor is no longer available due to low demand – please submit changes via email.
- Performance (Contributed by Valentin Haenel) (3 OPT commits):
- Further optimized LIBSVM bindings.
- Copy-if-sorted in
selectFeatures
.
- New functionality (25 NF commits):
ProcrusteanMapper
with orthogonal and oblique transformations.- Ability to generate simple reports using
reportlab
. See/runexamples/match_distribution.py
for example. TreeClassifier
– construct simple hierarchies of classifiers.wtf()
to report information about the system/PyMVPA to be included in the bug reports.- Parameter ‘reverse’ to swap training/testing splits in
Splitter
. - Example code for the analysis of event-related dataset using
ERNiftiDataset
. toEvents()
to create lists ofEvent
.mvpa-prep-fmri
was extended with plotting of motion correction parameters.ColumnData
can be explicitly told either file contains a header.- In
XMLBasedAtlas
(e.g.fsl
atlases) it is now possible to provide custom ‘image_file’ to get maps or indexes for the areas given an atlas’s volume registered into subject space. - Updated included LIBSVM version to 2.89 and provided support for its “silencing”.
- Refactored (27 RF commits):
- Dataset’s
copy()
with deep=False allows for shallow copying the dataset. FeatureSelectionClassifier
s inwarehouse
not to reuse the same classifiers, but to use clones.
- Dataset’s
- Fixed (70 BF commits):
OneWayAnova
: previously degrees of freedom were not considered while computing F-scores.- Majority voting strategy in
kNN
: it was not working. - Various fixes to ensure cross-platform building (
numpy
header locations, etc). - Stability fixes in
ConfusionMatrix
. idsonboundaries()
: samples at the end of the sequence were not handled properly.- Proper “untraining” of
FeatureSelectionClassifier
s classifiers which use sensitivities: it could lead to various unpleasant side-effects if the same slave classifier was used simultaneously by multipleMetaClassifiers
(likeTreeClassifier
).
- Documentation (25 DOC commits): citations, spelling corrections, etc.
0.4.2 (Mon, 25 May 2009)
- New correlation stability measure
(
CorrStability
). - New elastic net classifier (
ENET
). - New GLM-Net regression/classifier (
GLMNET
). - New measure
CompoundOneWayAnova
. - New measure
DSMDatasetMeasure
. - New meta-measure
TScoredFeaturewiseMeasure
. - New basic
GLM
implementation. - New examples for Gaussian process regression.
- New example showing a searchlight analysis employing a dissimilarity matrix based measure.
- New
ZScoreMapper
. - New import helper for FSL design matrices
(
FslGLMDesign
). - New implementation of a mapper using a self-organizing map
(
SimpleSOMMapper
) and a corresponding example. - Matplotlib backend is now configurable via
MVPA_MATPLOTLIB_BACKEND
. - PyMVPA version is now avialable from
mvpa.__version__
. - Renamed
mvpa.misc.plot.errLinePLot
toplotErrLine()
for consistency. - Fixed
NFoldSplitter
to support N-3 and larger splits. - Improved speed of LIBSVM backend. Thanks to Valentin Haenel and Tiziano Zito.
- Updated included LIBSVM version to 2.89.
- Adjust LIBSVM Python interface for recent NumPy API and latest LIBSVM release 2.89.
- Refactored examples parser into a standalone tool to turn PyMVPA examples into restructured text sources.
- New correlation stability measure
(
0.4.1 (Sat, 24 Jan 2009)
- Unit tests and example data are now also installed. In conjunction with
mvpa.test()
, this allow to easily run unittests from within Python. NiftiDataset
capable to handle files with less than 4 dimensions, which can, optionally, be provided as a list of filenames orNiftiImage
objects. That makes it easy to load data from a sequence of files.- Changes (code refactorings) which might impact any user who
imports from
suite
: - Changes (code refactorings) which should not impact any user who
imports from
suite
:- Meta classifiers definitions moved from
base
intometa
. - Splitters definitions moved from
splitter
intosplitters
- Meta classifiers definitions moved from
- Unit tests and example data are now also installed. In conjunction with
0.4.0 (Sat, 15 Nov 2008)
- Add
Hamster
, as a simple facility to easily store any serializable objects in a compressed file and later on resurrect all of them with a single line of code. - SVM backend is now configurable via
MVPA_SVM_BACKEND
(libsvm or shogun). - Non-deterministic tests in the unittest battery are now configurable via
MVPA_TESTS_LABILE
. - New helper to determine and plot the best matching distribution(s) for the data (matchDistribution, plotDistributionMatches). It is WiP thus API can change in the upcoming release.
- Simplifies API of mappers.
- Splitters can now limit the number of splits automatically.
- New
CombinedMapper
to map between multiple, independent dataspace and a common feature space. - New
ChainMapper
to create chains of mappers of abitrary lenght (e.g. to build preprocessing pipelines). - New
EventDataset
to rapidly extract boxcar-shaped samples from data array using a simple list ofEvent
definitions. - Removed obsolete MetricMapper class.
Mapper
itself provides the facilities for dealing with metrics. BoxcarMapper
can now handle data with more than four dimensions/axis and also performs reverse mapping of single boxcar samples.FslEV3
can now convert EV3 files into a list ofEvent
instances.- Results of tests for external dependencies are now stored in PyMVPA’s
config manager (
mvpa.cfg
) and can be stored to a file (not done automatically at the moment). This will significantly decrease the time needed to import themvpa
module, as it prevents the repeated and lengthy tests for working externals. - Initial support for ROC computing and AUC as an accuracy measure.
- Weights of LARS are now available via
LARSWeights
. - Added an initial list of MVPA-related references to the manual, tagged with keywords and comments as well is DOI or similar URL reference to the original document.
- Added initial glossary to the manual.
- New ‘Module reference’, as a middle-ground between manual and API reference.
- New manual section about meta-classifiers (contributed by James M. Hughes).
- New minimal example for a ‘getting started’ section in the manual.
- Former
MVPA_QUICKTEST
was renamed toMVPA_TESTS_QUICK
. - Update installation instructions for RPM-based distributions to make use of the OpenSUSE Build Service.
- Updated install instructions for several RPM-based GNU/Linux distributions.
- Switch from distutils to numpy.distutils (no change in dependencies).
- Depend on PyNIfTI >= 0.20081017.1 and gain a smaller memory footprint when accessing NIfTI files via all datasets with NIfTI support.
- Added workaround to make PyMVPA work with older Shogun releases and those from 0.6.4 on, which introduced backward-incompatible API changes.
- Add
0.3.1 (Sun, 14 Sep 2008)
- New manual section about feature selection with a focus on RFE. Contributed by James M. Hughes.
- New dataset type
ChannelDataset
for data structured in channels. Might be useful for data modalities like EEG and MEG. This dataset includes support for common preprocessing steps like resampling and baseline signal substraction. - Plotting of topographies on heads. Thanks to Ingo Fründ for contributing this code. Additionally, a new example shows how to do such plots.
- New general purpose function for generating barplots and candlestick plots
with error bars (
plotBars()
). - Dataset supports mapping of string labels onto numerical labels, removing the need to perform this mapping manually in user code. ‘clfs_examples.py’ is adjusted accordingly to demonstrate the new feature.
- New
mvpa.clfs.base.Classifier.summary()
method to dump classifier settings. - Improved and more flexible
plotERPs()
. - New
IterativeRelief
sensitivity analyzer. - Added visualization of confusion matrices via
mvpa.clfs.transerror.ConfusionMatrix.plot()
inspired by Ingo Fründ. - The PyMVPA version is now globally available in
mvpa.pymvpa_version
. - BugFix:
TuebingenMEG
reader failed in some cases. - Several improvements (docs and implementation) for building PyMVPA on MacOS X.
- New convenience accessor methods (
select()
,where()
and__getitem__()
) for :class`~mvpa.datasets.base.Dataset`. - New
mvpa.seed()
function to configure the random number generators from user code. - Added reader for a MEG sensor locations format
(
TuebingenMEGSensorLocations
). - Initial model selection support for GRP (using openopt).
- And tons of minor bugfixes, additional tests and improved documentation.
0.3.0 (Mon, 18 Aug 2008)
- Import of binary EEP files (used by EEProbe) and EEPDataset class.
- Initial version of a meta dataset class (MetaDataset). This is a container for multiple datasets, which behaves like a dataset itself.
- Regression performance is summarized now within RegressionStatistics.
- Error functions: CorrErrorPFx, RelativeRMSErrorFx.
- Measures: CorrCoef.
- Data generators: chirp, wr1996
- Few more examples: curvefitting, kerneldemo, smellit, projections
- Updated kNN classifier. kNN is now able to use custom distance function to determine that nearest neighbors. It also (re)gained the ability to do simple majority or weighted voting.
- Some initial convenience functions for plotting typical results and data exploration.
- Unified configuration handling with support for user-specific and analysis-specific config files, as well as the ability to override all config settings via environment variables. The configuration handling is used for PyMVPA internal settings, but can also be easily used for custom (user-)settings.
- Improved modularity, e.g. SciPy is not required anymore, but still very useful.
- Initial implementations of ICA and PCA mapper using functionality provided by MDP. These mappers are more or less untested and should be used with great care.
- Further improved docstrings of some classes, but still a long way to go.
- New ‘boxcar’ mapper, which is the similar to the already present transformWithBoxCar() function, but implemented as a mapper.
- New SampleGroupMapper that can be used for e.g. block averaging of samples. See new FAQ item.
- Stripped redundant suffixes from module names, e.g. mvpa.datasets.niftidataset -> mvpa.datasets.nifti
- mvpa.misc.cmdline variables opt* and opts* were groupped within opt and optss class instances. Also names of the options were changed to match ‘dest’ of the options. Use tools/refactor.py to quickly fix your custom code.
- Change all references to PyMVPA website to www.pymvpa.org.
- Make website stylesheet compatible with sphinx 0.4.
- Several minor improvements of the compatibility with MacOS.
- Extended FAQ section of the manual.
- Bugfix: double_gamma_hrf() ignoring K2 argument.
0.2.2 (Tue, 17 Jun 2008)
- Extended build instructions: Added section on OpenSUSE.
- Replaced ugly PYMVPA_LIBSVM environment variable to trigger compiling the LIBSVM wrapper with a proper ‘–with-libsvm’ switch in setup.py. Additionally, setup.py now detects if included LIBSVM has been built and enables LIBSVM wrapper automatically in this case.
- Added proper Makefiles for LIBSVM copy, with configurable compiler flags.
- Added ‘setup.cfg’ to remove the need to manually specify swig-opts (Windows specific configuration is in ‘setup.cfg.win’).
0.2.1 (Sun, 15 Jun 2008)
- Several improvements to make building PyMVPA on Windows systems easy (e.g. added dedicated Makefile.win to build a binary installer).
- Improved and extended documentation for building and installing PyMVPA.
- Include a minimal copy of the required (patched) LIBSVM library (currently
version 2.85.0) for convenience. This copy is automatically compiled and
used for the LIBSVM wrapper when PyMVPA built using the
Make
approach.
0.2.0 (Wed, 29 May 2008)
- New Splitter class (HalfSplitter) to split into first and second half.
- New Splitter class (CustomSplitter) to allow for splits with an arbitrary number of datasets per split and the ability to specify the association of samples with any of those datasets (not just the validation set).
- New sparse multinomial logistic regression (SMLR) classifier and associated sensitivity analyzer.
- New least angle regression classifier (LARS).
- New Gaussian process regression classifier (GPR).
- Initial documentation on extending PyMVPA.
- Switch to Sphinx for documentation handling.
- New example comparing the performance of all classifiers on some artificial datasets.
- New data mapper performing singular value decomposition (SVDMapper) and an example showing its usage.
- More sophisticated data preprocessing: removal of non-linear trends and other arbitrary confounding regressors.
- New
Harvester
class to feed data from arbitrary generators into multiple objects and store results of returned values and arbitrary properties. - Added documentation about how to build patched libsvm version with sane debug output.
- libsvm bindings are not build by default anymore. Instructions on how to reenable them are available in the manual.
- New wrapper from SVM implementation of the Shogun toolbox.
- Important bugfix in RFE, which reported incorrect feature ids in some cases.
- Added ability to compute stats/probabilities for all measures and transfer errors.
0.1.0 (Wed, 20 Feb 2008)
- First public release.