{
  "fetched_at": "2026-10-19T07:54:12Z",
  "source_url": "https://www.kaggle.com/competitions/brain-computer-interface-bci-trajectory-prediction/data",
  "pages": [
    {
      "name": "data-description",
      "content": "<p>The training set (train.mat) consists of the following variables:</p>\r\n<ul>\r\n<li><span style=\"font-size: 1em; line-height: 1.5em;\"><strong>signal_tr</strong>: raw voltage readings at 2034.5 Hz. Each row is a new reading and each column is the reading from a particular electrode (32 in total). The voltage readings from the brain are collected via Electrocorticography (ECOG)</span></li>\r\n<li><strong>pos_x_tr</strong>: x-component of the cursor's velocity vector at different time-steps (31,255 total time-steps). This one half the prediction label (the other is the y-component). These readings are at 25 Hz, so one of the things spectral estimation must do is down-sample the signal to 25 Hz as well (example.m does this already).</li>\r\n<li><strong>pos_y_tr</strong>: y-component of the cursor's velocity vector at different time-steps. This is the same size as pos_x_tr and the second half of the label to be predicted.</li>\r\n<li><strong>timestamps_tr</strong>: this gives the timestamps of the voltage samples (2034.5 Hz)</li>\r\n<li><strong>time_sample_tr</strong>: the timestamps of the cursor at 25 Hz. Using this and the above data we can down-sample the signal to 25 Hz.</li>\r\n</ul>\r\n<p>The testing set (test.mat) is very similar:</p>\r\n<ul>\r\n<li><span style=\"font-size: 1em; line-height: 1.5em;\"><strong>signal_te</strong>: raw voltage readings that is a matrix of size (num. readings x electrodes).</span></li>\r\n<li><strong>timestamps_te</strong>: the voltage timestamps</li>\r\n<li><strong>time_sample_te</strong>: the cursor timestamps</li>\r\n</ul>",
      "isPublished": false,
      "hasIsPublished": false,
      "postTitle": "",
      "hasPostTitle": false,
      "mimeType": "",
      "hasMimeType": false
    },
    {
      "name": "Description",
      "content": "<p>Imagine you would like to know how to control a cursor on a screen with just your mind! This project is a step in this direction. Specifically, the task is to take readings of brain activity (voltages) and learn a mapping from these readings to velocity vectors for a computer cursor. These readings were measured from the brain of a Rhesus monkey while it watched a researcher move a cursor with a joystick from a START state to a GOAL state. While watching it attempted to (with its mind) to direct the cursor from the START state to the GOAL state (this was encouraged by giving the monkey a reward in previous trials every time the cursor reached the GOAL state. The setup is depicted in the figure below:</p>\r\n<p><img src=\"http://mkusner.github.io/images/joystick_record.png\" alt=\"joystick task\" width=\"594\" height=\"450\" style=\"display: block; margin-left: auto; margin-right: auto;\" /></p>\r\n<p>Finding a mapping from brain activity to cursor velocity vectors is a non-trivial task. Currently, the state-of-the-art is to first perform spectral estimation on the voltage readings (this will give us a sense of the frequencies of the signal), and then to perform linear regression to map these frequencies to the true velocity vectors given by the joystick (see: example.m).</p>\r\n<p>So the two tasks to improve upon the state-of-the-art are to:</p>\r\n<ol>\r\n<li>Improve the spectral estimation (secondary task)</li>\r\n<li>Improve regression from spectrum to velocity vectors (primary task)</li>\r\n</ol>\r\n<p>The training set (train.mat) consists of the following variables:</p>\r\n<ul>\r\n<li><span style=\"font-size: 1em; line-height: 1.5em;\"><strong>signal_tr</strong>: raw voltage readings at 2034.5 Hz. Each row is a new reading and each column is the reading from a particular electrode (32 in total). The voltage readings from the brain are collected via Electrocorticography (<a href=\"https://en.wikipedia.org/wiki/Electrocorticography\">ECOG</a>)</span></li>\r\n<li><strong>pos_x_tr</strong>: x-component of the cursor's velocity vector at different time-steps (31,255 total time-steps). This one half the prediction label (the other is the y-component). These readings are at 25 Hz, so one of the things spectral estimation must do is down-sample the signal to 25 Hz as well (example.m does this already).</li>\r\n<li><strong>pos_y_tr</strong>: y-component of the cursor's velocity vector at different time-steps. This is the same size as pos_x_tr and the second half of the label to be predicted.</li>\r\n<li><strong>timestamps_tr</strong>: this gives the timestamps of the voltage samples (2034.5 Hz)</li>\r\n<li><strong>time_sample_tr</strong>: the timestamps of the cursor at 25 Hz. Using this and the above data we can down-sample the signal to 25 Hz.</li>\r\n</ul>\r\n<p>The testing set (test.mat) is very similar:</p>\r\n<ul>\r\n<li><strong>signal_te</strong>: raw voltage readings that is a matrix of size (num. readings x electrodes).</li>\r\n<li><strong>timestamps_te</strong>: the voltage timestamps</li>\r\n<li><strong>time_sample_te</strong>: the cursor timestamps</li>\r\n</ul>\r\n<p>For more information on the data please email: matt.kusner@gmail.com. For how to perform spectral estimation and regression please take a look at the example.m file. We can't wait to see what things you will come up with!</p>\r\n<p>Acknowledgements</p>\r\n<p>We thank NSF grant EFRI-1137211.</p>",
      "isPublished": false,
      "hasIsPublished": false,
      "postTitle": "",
      "hasPostTitle": false,
      "mimeType": "",
      "hasMimeType": false
    },
    {
      "name": "Evaluation",
      "content": "<p>The submissions will be evaluated based on RMSE between the test cursor directions and the predicted directions. To submit, please create a file in the following format:</p>\r\n<p>Submission Format</p>\r\n<p>The first column has a unique ID (simply put a different number for each row). The second column stacks the predictions of the cursor x-directions then the cursor y-directions. The file should contain a header and have the following format:</p>\r\n<p>Id,Prediction<br />1,0.0<br />2,0.34106<br />3,0.94051<br />etc.</p>\r\n<p><br />For more information see the example.m file in the data tab.</p>",
      "isPublished": false,
      "hasIsPublished": false,
      "postTitle": "",
      "hasPostTitle": false,
      "mimeType": "",
      "hasMimeType": false
    },
    {
      "name": "rules",
      "content": "\r\n\t<!-- Begin Base Rules -->\r\n    <h3>One account per participant</h3>\r\n    <p>You cannot sign up to Kaggle from multiple accounts and therefore you cannot submit from multiple accounts.</p>\r\n    <h3>No private sharing outside teams</h3>\r\n    <p>\r\n        Privately sharing code or data outside of teams is not permitted.\r\n        It's okay to share code if made available to all participants on the forums.\r\n    </p>\r\n    <h3>Team Mergers</h3>\r\n    <p>Team mergers are not allowed in this competition.</p>\r\n\r\n    <h3>Team Limits</h3>\r\n    <p>There is no maximum team size.</p>\r\n    <h3>Submission Limits</h3>\r\n    <p>You may submit a maximum of 2 entries per day.</p>\r\n    <p>You may select up to 2 final submissions for judging.</p>\r\n    <h3>Competition Timeline</h3>\r\n    <p>Start Date: <strong>4/12/2016 6:40 PM UTC</strong></p>\r\n    <p>Merger Deadline: <strong>None</strong></p>\r\n    <p>Entry Deadline: <strong>None</strong></p>\r\n    <p>End Date: <strong>8/1/2016 11:59 PM UTC</strong></p>\r\n\t<!-- End Base Rules -->\r\n",
      "isPublished": false,
      "hasIsPublished": false,
      "postTitle": "",
      "hasPostTitle": false,
      "mimeType": "",
      "hasMimeType": false
    }
  ]
}