{ "metadata": { "name": "pairwise_transform" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Learning to rank with scikit-learn: the pairwise transform\n", "============================================================\n", "\n", "This tutorial introduces the concept of pairwise preference used in most [ranking problems](http://en.wikipedia.org/wiki/Learning_to_rank). I'll use scikit-learn and for learning and matplotlib for visualization.\n", "\n", "In the ranking setting, training data consists of lists of items with some order specified between items in each list. This order is typically induced by giving a numerical or ordinal score or a binary judgment (e.g. \"relevant\" or \"not relevant\") for each item, so that for any two samples a and b, either a < b, b > a or b and a are not comparable.\n", "\n", "For example, in the case of a search engine, our dataset consists of results that belong to different queries and it makes sense to compare the relevance of results for the same query but it is meaningless to compare the relevance across queries, e.g. a result might be very relevant for a particular query but will probably be irrelevant for most other queries.\n", "\n", "The order relationship is usually domain-specific. For instance, in information retrieval the set of comparable samples is refered to as a \"query id\". The goal behind this is to compare only documents that belong to the same query ([Joachims 2002](http://dx.doi.org/10.1145/775047.775067)). In medical imaging on the other hand, the order of the labels usually depend on the subject so the comparable samples is given by the different subjects in the study ([Pedregosa et al 2012](http://hal.inria.fr/hal-00717990/en))." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import itertools\n", "import numpy as np\n", "from scipy import stats\n", "import pylab as pl\n", "from sklearn import svm, linear_model, cross_validation" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "To start with, we'll create a dataset in which the target values consists of three graded measurements Y = {0, 1, 2} and the input data is a collection of 30 samples, each one with two features.\n", "\n", "The set of comparable elements (queries in information retrieval) will consist of two equally sized blocks, $X = X_1 \\cup X_2$, where each block is generated using a normal distribution with different mean and covariance. In the pictures, we represent $X_1$ with round markers and $X_2$ with triangular markers." ] }, { "cell_type": "code", "collapsed": false, "input": [ "np.random.seed(0)\n", "theta = np.deg2rad(60)\n", "w = np.array([np.sin(theta), np.cos(theta)])\n", "K = 20\n", "X = np.random.randn(K, 2)\n", "y = [0] * K\n", "for i in range(1, 3):\n", " X = np.concatenate((X, np.random.randn(K, 2) + i * 4 * w))\n", " y = np.concatenate((y, [i] * K))\n", "\n", "# slightly displace data corresponding to our second partition\n", "X[::2] -= np.array([3, 7]) \n", "blocks = np.array([0, 1] * (X.shape[0] / 2))\n", "\n", "# split into train and test set\n", "cv = cross_validation.StratifiedShuffleSplit(y, test_size=.5)\n", "train, test = iter(cv).next()\n", "X_train, y_train, b_train = X[train], y[train], blocks[train]\n", "X_test, y_test, b_test = X[test], y[test], blocks[test]\n", "\n", "# plot the result\n", "idx = (b_train == 0)\n", "pl.scatter(X_train[idx, 0], X_train[idx, 1], c=y_train[idx], \n", " marker='^', cmap=pl.cm.Blues, s=100)\n", "pl.scatter(X_train[~idx, 0], X_train[~idx, 1], c=y_train[~idx],\n", " marker='o', cmap=pl.cm.Blues, s=100)\n", "pl.arrow(0, 0, 8 * w[0], 8 * w[1], fc='gray', ec='gray', \n", " head_width=0.5, head_length=0.5)\n", "pl.text(0, 1, '$w$', fontsize=20)\n", "pl.arrow(-3, -8, 8 * w[0], 8 * w[1], fc='gray', ec='gray', \n", " head_width=0.5, head_length=0.5)\n", "pl.text(-2.6, -7, '$w$', fontsize=20)\n", "pl.axis('equal')\n", "pl.show()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "display_data", "png": "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\n4wQAAAAASUVORK5CYII=\n" } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the plot we clearly see that for both blocks there's a common vector w such that the projection onto w gives a list with the correct ordering.\n", "\n", "However, because linear considers that output labels live in a metric space it will consider that all pairs are comparable. Thus if we fit this model to the problem above it will fit both blocks at the same time, yielding a result that is clearly not optimal. In the following plot we estimate $\\hat{w}$ using an l2-regularized linear model." ] }, { "cell_type": "code", "collapsed": false, "input": [ "ridge = linear_model.Ridge(1.)\n", "ridge.fit(X_train, y_train)\n", "coef = ridge.coef_ / linalg.norm(ridge.coef_)\n", "pl.scatter(X_train[idx, 0], X_train[idx, 1], c=y_train[idx], \n", " marker='^', cmap=pl.cm.Blues, s=100)\n", "pl.scatter(X_train[~idx, 0], X_train[~idx, 1], c=y_train[~idx],\n", " marker='o', cmap=pl.cm.Blues, s=100)\n", "pl.arrow(0, 0, 7 * coef[0], 7 * coef[1], fc='gray', ec='gray', \n", " head_width=0.5, head_length=0.5)\n", "pl.text(2, 0, '$\\hat{w}$', fontsize=20)\n", "pl.axis('equal')\n", "pl.title('Estimation by Ridge regression')\n", "pl.show()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "display_data", "png": "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\n" } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "To assess the quality of our model we need to define a ranking score. Since we are interesting in a model that *orders* the data, it is natural to look for a metric that compares the ordering of our model to the given ordering. For this, we use [Kendall's tau correlation coefficient](http://en.wikipedia.org/wiki/Kendall_tau_rank_correlation_coefficient), which is defined as (P - Q)/(P + Q), being P the number of concordant pairs and Q is the number of discordant pairs. This measure is used extensively in the ranking litterature (e.g [Optimizing Search Engines using Clickthrough Data](http://www.cs.cornell.edu/people/tj/publications/joachims_02c.pdf)).\n", "\n", "We thus evaluate this metric on the test set for each block separately." ] }, { "cell_type": "code", "collapsed": false, "input": [ "for i in range(2):\n", " tau, _ = stats.kendalltau(\n", " ridge.predict(X_test[b_test == i]), y_test[b_test == i])\n", " print('Kendall correlation coefficient for block %s: %.5f' % (i, tau))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Kendall correlation coefficient for block 0: 0.71122\n", "Kendall correlation coefficient for block 1: 0.84387\n" ] } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The pairwise transform\n", "----------------------\n", "\n", "As proved in ([Herbrich 1999](http://www.mendeley.com/research/support-vector-learning-ordinal-regression/)), if we consider linear ranking functions, the ranking problem can be transformed into a two-class classification problem. For this, we form the difference of all comparable elements such that our data is transformed into $(x'_k, y'_k) = (x_i - x_j, sign(y_i - y_j))$ for all comparable pairs.\n", "\n", "This way we transformed our ranking problem into a two-class classification problem. The following plot shows this transformed dataset, and color reflects the difference in labels, and our task is to separate positive samples from negative ones. The hyperplane {x^T w = 0} separates these two classes." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# form all pairwise combinations\n", "comb = itertools.combinations(range(X_train.shape[0]), 2)\n", "k = 0\n", "Xp, yp, diff = [], [], []\n", "for (i, j) in comb:\n", " if y_train[i] == y_train[j] \\\n", " or blocks[train][i] != blocks[train][j]:\n", " # skip if same target or different group\n", " continue\n", " Xp.append(X_train[i] - X_train[j])\n", " diff.append(y_train[i] - y_train[j])\n", " yp.append(np.sign(diff[-1]))\n", " # output balanced classes\n", " if yp[-1] != (-1) ** k:\n", " yp[-1] *= -1\n", " Xp[-1] *= -1\n", " diff[-1] *= -1\n", " k += 1\n", "Xp, yp, diff = map(np.asanyarray, (Xp, yp, diff))\n", "pl.scatter(Xp[:, 0], Xp[:, 1], c=diff, s=60, marker='o', cmap=pl.cm.Blues)\n", "x_space = np.linspace(-10, 10)\n", "pl.plot(x_space * w[1], - x_space * w[0], color='gray')\n", "pl.text(3, -4, '$\\{x^T w = 0\\}$', fontsize=17)\n", "pl.axis('equal')\n", "pl.show()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "display_data", "png": "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\nYII=\n" } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we see in the previous plot, this classification is separable. This will not always be the clase, however, in our training set there are no order inversions, thus the respective classification problem is separable.\n", "\n", "We will now finally train an Support Vector Machine model on the transformed data. This model is known as RankSVM. We will then plot the training data together with the estimated coefficient $\\hat{w}$ by RankSVM." ] }, { "cell_type": "code", "collapsed": false, "input": [ "clf = svm.SVC(kernel='linear', C=.1)\n", "clf.fit(Xp, yp)\n", "coef = clf.coef_.ravel() / linalg.norm(clf.coef_)\n", "pl.scatter(X_train[idx, 0], X_train[idx, 1], c=y_train[idx],\n", " marker='^', cmap=pl.cm.Blues, s=100)\n", "pl.scatter(X_train[~idx, 0], X_train[~idx, 1], c=y_train[~idx],\n", " marker='o', cmap=pl.cm.Blues, s=100)\n", "pl.arrow(0, 0, 7 * coef[0], 7 * coef[1], fc='gray', ec='gray',\n", " head_width=0.5, head_length=0.5)\n", "pl.arrow(-3, -8, 7 * coef[0], 7 * coef[1], fc='gray', ec='gray',\n", " head_width=0.5, head_length=0.5)\n", "pl.text(1, .7, '$\\hat{w}$', fontsize=20)\n", "pl.text(-2.6, -7, '$\\hat{w}$', fontsize=20)\n", "pl.axis('equal')\n", "pl.show()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "display_data", "png": "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\n" } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally we will check that as expected, the ranking score (Kendall tau) increases with the RankSVM model respect to linear regression." ] }, { "cell_type": "code", "collapsed": false, "input": [ "for i in range(2):\n", " tau, _ = stats.kendalltau(\n", " np.dot(X_test[b_test == i], coef), y_test[b_test == i])\n", " print('Kendall correlation coefficient for block %s: %.5f' % (i, tau))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Kendall correlation coefficient for block 0: 0.83627\n", "Kendall correlation coefficient for block 1: 0.84387\n" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is indeed higher than the values (0.71122, 0.84387) obtained in the case of linear regression." ] } ], "metadata": {} } ] }