Code to implement a graph-based medical decision support system
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


These classes implement the Graph-Based Diagnostic Medical Decision Support System found here

This code implements three novel inventions:

  1. A module for the generation of statistically varying medical records with configurable accuracy, number of signs, and number of symptoms. This is implemented in the module.
  2. An algorithm for training a new machine learning model for analysis of competing hypotheses, (the Bassett-Deitmen Training Algorithm). This is implemented in the module.
  3. An algorithm for querying the model, (the Bassett-Deitman Query Algorithm), is provided for querying trained models. it is also implemented in the module.

In addition to the aforementioned models, a basic web-based user interface is provided in

Code Example

from the command line, browse to ~/bassett_deitmen_dmdss/ and run

cd ~/bassett_deitmen_dmdss/
python ./

This will generate training records, train the model on them, and provide a web interface on port 8080. A new record to diagnose can be generated by visiting http://localhost:8080/records/?record_count=1. The diagnostic UI is located at http://localhost:8080/. Enter the signs and symptoms, click the 'diagnose' button, and you should be provided an output similar to: Bassett Deitmen Diagnostic MDSS UI


It is the hope of the authors that this model may support the many medical practitioners around the world and help those in need. This project provides a way for less experienced medical practitioners to benefit from the experience of the collective. Additionally it provides a means for experienced medical practitioners to augment their memory to identify outlier cases.


Install the project dependencies:

pip install numpy scipy.stats py2neo networkx flask flask.ext.restful scipy.optimize pprint imp

Download the project:

git clone

API Reference

Three APIs exist within the UI.

Record Generation API

The record generation API exists at localhost:8080/records/. It takes an argument of record_count with the number of records requested and returns them as a JSON dictionary of the form:

 'signs': {'sign_1404': 0.1},
 'symptoms': {'symptom_11': 0.5,
 'symptom_24': 0.3,
 'symptom_72': 1,
 'symptom_80': 0}},
{'diagnosis': 'diagnosis_4789',
 'signs': {'sign_1071': 0, 'sign_2259': 0.4},
 'symptoms': {'symptom_12': 1,
 'symptom_135': 0.5,
 'symptom_34': 0,
 'symptom_40': -0.22229441461509403,
 'symptom_5': 0.20000000000000001,
 'symptom_96': 0}}

Diagnostic API

The diagnostic API resides at localhost:8080/diagnose. It takes a git request with k:v arguments where the key is a sign or symptom and the value is the value of the sign or symptom. once called, it returns a JSON list of diagnoses in priority order with relatives scores:

{'diagnosis_2287': 0.03583184375312342,
'diagnosis_2497': 0.03916503852085583,
'diagnosis_2635': 0.86711857628206257,

Truth API

The truth API provides a means for identifying what the 'true' signs or symptoms associated with a diagnosis were in the truth data underlying the training data. It may be found at localhost:8080/truth with argument truth with a value of the diagnosis to identify the truth signs and symptoms for. It returns a JSON dictionary of the form:

{'diagnosis_6827': {'signs': {'sign_1534': {'factors': {'inverse': True},
 'function': 'bool',
'function_type': 'categorical'},
 'sign_1939': {'factors': {'inverse': True},
 'function': 'bool',
'function_type': 'categorical'},
 'sign_2345': {'factors': {'inverse': False},
 'function': 'bool',
'function_type': 'categorical'},
 'sign_59': {'factors': {'levels': [0.1,
 'symptoms': {'symptom_112': {'factors': {'inverse': True},
 'function': 'bool',
'function_type': 'categorical'},
 'symptom_134': {'factors': {'inverse': True},
 'function': 'bool',
 'function_type': 'categorical'},
 'symptom_25': {'factors': {'levels': [1,


Example tests may be found in the file in the root of the project


Gabriel Bassett Kindall Deitmen

Special thanks to the medical professionals, academics, and especially Jasmine Gordon who helped us in realizing this project.


Copyright 2015 Gabriel Bassett

Licensed under the Apache License, Version 2.0 (the "License") for non-commercial use only; you may not use this file except in compliance with the License. You may obtain a copy of the License at

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.