CrossCat is a domain-general, Bayesian method for analyzing high-dimensional data tables. CrossCat estimates the full joint distribution over the variables in the table from the data, via approximate inference in a hierarchical, nonparametric Bayesian model, and provides efficient samplers for every conditional distribution. CrossCat combines strengths of nonparametric mixture modeling and Bayesian network structure learning: it can model any joint distribution given enough data by positing latent variables, but also discovers independencies between the observable variables.

A range of exploratory analysis and predictive modeling tasks can be addressed via CrossCat, including detecting predictive relationships between variables, finding multiple overlapping clusterings, imputing missing values, and simultaneously selecting features and classifying rows. Research on CrossCat has shown that it is suitable for analysis of real-world tables of up to 10 million cells, including hospital cost and quality measures, voting records, handwritten digits, and state-level unemployment time series.


The source code for a C++ CrossCat implementation is available on Github. We recommend using CrossCat as an analysis schema in BayesDB, which can be installed using the Open Probabilistic Programming Stack.


Crosscat: A fully Bayesian, nonparametric method for analyzing heterogeneous, high-dimensional data. Mansinghka, V.; Shafto, P.; Jonas, E.; Petschulat, C.; Gasner, M.; and Tenenbaum, J. Journal of Machine Learning Research, 17. 2016. PDF

A probabilistic model of cross-categorization. Shafto, P.; Kemp, C.; Mansinghka, V.; and Tenenbaum, J. Cognition, 120(1): 1–25. 2011. PDF