/best-heart-drug-selection

Created for toolchain: https://console.bluemix.net/devops/toolchains/c89fc62b-a9c4-4cde-9f19-67e03b66e3de?env_id=ibm%3Ayp%3Aus-south

Primary LanguageJavaScriptApache License 2.0Apache-2.0

About

The application demonstrates usage of IBM Watson Machine Learning Bluemix offering.

Application is based on Node.js and Express framework and utilizes IBM Watson Machine Learning REST API.

Within this sample scoring application you are able to:

  • select one of online deployments (scoring)
  • select one of customers
  • makes score requests
  • display predicted best drug for selected patient
  • click name of drugs to send feedback

Application screenshot

Requirements

Prepare Bluemix ecosystem

  1. From Bluemix catalog choose IBM Watson Machine Learning service. This service will later be binded with a Node.js application created from this sample.
  2. Using the Watson Studio, add the Heart Drug Selection model (sample model), setup continuous learning system for published model as describe here via API or via UI

Also a custom model can also be used; the requirement is that its input schema matches following schema:

[{"name": "AGE", "type": "integer"},
    {"name": "SEX", "type": "string"},
    {"name": "BP", "type": "string"},
    {"name": "CHOLESTEROL", "type": "string"},
    {"name": "NA", "type": "decimal(12,6)"},
    {"name": "K", "type": "decimal(13,6)"}]
  1. Create deployment of type online using Heart Drug Selection model.

Application Deployment

For a fast start, you can deploy the pre-built app to Bluemix either by clicking the button

Deploy to Bluemix

or using Watson Machine Learning Dashboard -> Samples -> (+) button.

Note: the application is fully functional only if binded with an instance of IBM Watson Machine Learning service, which needs to be done manually. Check instructions how to do it.

Manual Bluemix deployment

As an alternative to the button, the application can be manually deployed to Bluemix by pushing it with Cloud Foundry commands, as described in next section. Manual deployment is also required when you want to deploy modified source code. Manual deployment consists of pushing the application to Bluemix followed with binding IBM Watson Machine Learning service to deployed application.

Push to Bluemix

To push an application to Bluemix, open a shell, change to directory of your application and execute:

  • cf api <region> where <region> part may be https://api.ng.bluemix.net or https://api.eu-gb.bluemix.net depending on the Bluemix region you want to work with (US or Europe, respectively)
  • cf login which is interactive; provide all required data
  • cf push <app-name> where <app-name> is the application name of your choice

cf push can also read the manifest file, see Cloud Foundry Documentation. If you decide to use manifest, you can hardcode the name of your instance of IBM Watson Machine Learning service instead of binding it manually, see services section manifest.yml.template file.

If this is your first Bluemix Node.js application, refer documentation of node-helloworld project to gain general experience.

Bind IBM Watson Machine Learning service

See instructions

Local deployment

Running the application locally is useful when you want to test your changes before deploying them to Bluemix. To see how to work with source code, see Source code changes.

When the changes are ready, open a shell, change directory to your cloned repository and execute npm run build && npm start to start the application. The running application is available in a browser at http://localhost:6001 url.

Application run locally can also use Bluemix IBM Watson Machine Learning service, see instructions how to link it.

Source code changes

The repository comes with pre-build app. If you want to rebuild application after modifying the sources:

  • Follow steps listed in Requirements section
  • Change to directory with downloaded source code or cloned git repo
  • Execute npm install
  • Execute npm run build

IBM Watson Machine Learning service

The source code placed in service-client.js file is an example of how to call IBM Watson Machine Learning REST API through JavaScript code. It demonstrates following aspects:

  • Access token generation
  • Retrieval of online deployments
  • Extracting model from a deployment to make sure the deployment's model has expected schema
  • Scoring with a chosen online deployment

Binding services in Bluemix

As stated in Requirements section, from Bluemix catalog order an instance of IBM Watson Machine Learning service if you don't yet have it. Next step is to connect your deployed application with service, which is called binding. There are a few options to achieve that in Bluemix environment, link describes binding either by Bluemix user interface or by using cf cli.

Link local application with the Bluemix environment

  1. Open your instance of IBM Watson Machine Learning.
  2. Go to Service Credentials pane and press View Credentials. Copy json provided (url, username, password).
  3. Create ./config/local.json file by copying ./config/local.json.template file. Edit the local.json file and paste obtained pm-20 credentials.
  4. Start your local application npm start. You should be able to interact with the IBM Watson Machine Learning service e.g. by listing the deployments.

License

The code is available under the Apache License, Version 2.0.