Skip to content

Instantly share code, notes, and snippets.

@jonpsy
Last active June 7, 2020 13:28
Show Gist options
  • Save jonpsy/cf0222c5b7eb5813478c881a1d220a5c to your computer and use it in GitHub Desktop.
Save jonpsy/cf0222c5b7eb5813478c881a1d220a5c to your computer and use it in GitHub Desktop.
Random Fourier Features comparison between shogun and sklearn
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.kernel_approximation import RBFSampler\n",
"from sklearn.metrics.pairwise import rbf_kernel\n",
"import numpy as np\n",
"from math import exp,log\n",
"import matplotlib.pyplot as plt\n",
"import shogun as sg"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"#Setting up constants\n",
"width = 1.5\n",
"log_width = np.log(width / 2.) / 2.\n",
"num_vecs = 5\n",
"num_feats = 3\n",
"X = np.arange(1.0, 16.0).reshape(num_vecs,num_feats)\n",
"feats = sg.create_features(X.T)\n",
"vectors = np.arange(1.0, 7.0).reshape(2, num_feats)\n",
"vectors_sg = sg.create_features(vectors.T)\n",
"\n",
"diff_sg = []\n",
"rffs = [100,200,300,400,500,600,700,800,900,1000]\n",
"num_repeat = 50"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"#Get error sklearn\n",
"def rff_curves_sk(rffs):\n",
" diff_list = []\n",
" for target_dim in rffs:\n",
" rbf = RBFSampler(gamma=1./width,n_components=target_dim)\n",
" rbf_fitted = rbf.fit(X)\n",
" preprocessed = rbf_fitted.transform(vectors)\n",
" result_rff = np.dot(preprocessed[0], preprocessed[1])\n",
" result_kernel = rbf_kernel(vectors,gamma= 1/width)[0][1]\n",
" abs_diff = np.abs(result_rff - result_kernel)\n",
" diff_list.append(abs_diff)\n",
" # print(f'diff: {abs_diff}')\n",
" return diff_list"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"#Get error shogun\n",
"def rff_curves_sg(rffs):\n",
" diff_list = []\n",
" for target_dim in rffs:\n",
" rbf = sg.create_transformer(\"RandomFourierGaussPreproc\",dim_output=target_dim,log_width=log_width)\n",
" rbf.fit(feats)\n",
" preprocessed = rbf.transform(vectors_sg)\n",
" mat = np.array(preprocessed.get(\"feature_matrix\")).T\n",
" result_rff = np.dot(mat[0], mat[1])\n",
" gauss_kernel = sg.create_kernel('GaussianKernel', log_width = log_width)\n",
" gauss_kernel.init(vectors_sg,vectors_sg)\n",
" result_kernel = gauss_kernel.get_kernel_matrix()[0][1]\n",
" abs_diff = np.abs(result_rff - result_kernel)\n",
" diff_list.append(abs_diff)\n",
" # print(f'diff: {abs_diff}')\n",
" return diff_list"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA00AAAJcCAYAAAAl/k+mAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdeXicd3nu8e8zo32xFi+JLdmxkzhhCSGASNgaoCVp2lNICikJ0EJaTgO0aTmHLkBPWyBtKXQ5nEJTaFgS0gIpCQQMSQh7UsiC5cRxYjuL7djW4k3WYu2a5Tl/vO9Ir8YjaWRrNFruz3Xp0sy7zTMjyZ57fpu5OyIiIiIiIpJbrNgFiIiIiIiILGQKTSIiIiIiItNQaBIREREREZmGQpOIiIiIiMg0FJpERERERESmodAkIiIiIiIyDYUmEVlUzOw6M/tZseuQCWb2UTP7z3l8vHeY2fen2f9TM/uf0+y/1cz+tjDViYjIUqTQJCILjpm9xsweNLM+M+s2s5+b2cuLXddshG/cR8xswMy6zOybZrY2sv+jZpYI92e+/jzHuZmvV+Z4jI1m5lnHDZjZNfP5XOebu3/F3S/P59hChGwLfNLMjodf/2BmNsWxa81si5l1hj+rjVMc12hmx6K1mtkLzKzVzHrCrx+a2Qsi+8vN7HNmdiT8O/mOmTXluPbm8PfpPyPbpq0rvPaXzOyEmR02sw/kW1d4zEvN7IHw9/GImb0/3L7GzL4WPm5f+Ld9SeS8/2FmPzOz3vBxP29mtZH9t5rZWNbvezyy/61mttvM+s1sl5ldlfWcPhU+do+Z/ZuZlWb9DO4ys0EzO2Bmb5/iZ3VL+JqdG9mW/Tf7dK5zRWTxUmgSkQXFzFYA3wU+AzQCTcDHgNFi1nWKbnD3GuBcoAb4p6z9/+XuNZGvf8g+N/L10DSPU5917H/lOij65nK6bdMxs5LZHL9EXQ9cBbwYuBD4DeA9UxybBr4HvGWGa34S2J21rRO4muDvYBWwBbg9sv/9wCvDGtYBvQR/N9luArbOsq6PApuBs4DXA39uZlfkU5eZrQqv/e/ASoLf/0zLYE1Yy8vC878M3G1mNeH+OuBvw+fzfKAZ+Mes2v4h6/c9FT5uE/CfwAeAFcCfAV81szXheR8CWoALgPOAlwJ/mfU6jQFnAO8APmtmL4w+sJm9Bjhnitcs+jd7/hTHiMgipdAkIgvNeQDu/jV3T7n7sLt/3913RA8ys38KPy1+zsx+LbJ9XfgJereZ7TGz34/sqzSzL4fn7TazPzez9sj+7E+Px7txmdnrzKzdzP7EzI6a2SEz+918npC79wLfAi461RflVIT1f9bM7jGzQeD1U2yrM7PbLGjpOGBmf2lmsfAa14WtAZ8ys26CN9MzPe6bzGxn2FrwUzN7fmTfS83ssbAl4A4z+6/Ia3y/mb0lvP2a8Ofx6+H9N5jZ9khN0RaZy8zsqbDl4l8BC7c/H/gc8Mrw0//eSJkNZnZ3WMcjZjbVG+Fc3gX8s7u3u3sH8M/AdbkOdPcj7v5vnBxaoq/XKwneyN+SdW6vu+93dw+fU4oggGRsAu4LH2OEILhkv8m/liBM/WiWdb0T+Bt373H33cDnM88xj7o+ENb1FXcfdff+8Bq4+z53/7/ufij8+74ZKAPOD/d/1d2/5+5D7t4TPu6rp3rtsjQDve5+rwfuBgaZCDlvBD7t7t3ufgz4NPB74etUTRAg/8rdB9z9ZwRh8Hcir2UJQSi9Ic96RGQJUWgSkYXmGSAVhptfM7OGHMdcAjxN8Cn3PwBfNBvvHvU1oJ3gk+qrgY+b2a+E+z4CbATOBi4DfnuWtZ1J8El4E/Bu4KYp6pvEzFYCbwb2zPLx5sLbgb8DaoGfTbHtMwTP62zgtQRvmKOB8BJgH7AmPG9KZnYewc/gfwGrgXuA75hZmZmVAXcBtxK0MnwN+M3I6fcDrwtvXxo+5msj9+/P8XirgG8QtBisAvYSvskO36i/F3go/PS/PnLq2whaMBsIfi5/F7nmd83sQ9M8zRcCj0fuP05WWMlX2NJ3E8EbcZ/imF5ghODn9PHIri8Crw4/KKgiaB25N3LeCuBG4E9mWVMDwd/PtM9xmrpeAXRb0MX2qAXdBjdM8VgXEYSmqf42LgV2Zm37g/BDkW2ZkB1qBXaHoT1uQde8USDzgYuFX0TuN5tZHcGHNSl3f2aa5/y/gQeyP8CJ+HsLuuL+3MxeN8UxIrJIKTSJyILi7ieA1xC8gfw8cCxsOTojctgBd/982C3ny8Ba4AwzWx+e+0F3H3H37cAXmPi0+K3Ax8NPz9sJPmmejQRwo7sn3P0eYIDwE/IpfNrM+oAugjf0f5S1/61ha0zma13WuZntj85QV1fWdZ4f2fdtd/+5u6fD1ohJ28LndA3w4bBFYD9By8nvRK7R6e6fcfekuw/PUMs1wN3u/gN3TxB0SawEXkXwZrqE4NP+hLt/E/hF5Nz7mRyS/j5y/7XkCE3ArwO73P3O8PH+H3B4hhoBvunuv3D3JPAVIq2A7v4b7v6Jac6tAfoi9/uAmkhwn40/Bh5x921THRCGvTqCYPVYZNczwEGgAzhB0J3txsj+vwG+6O5ts6wp01Uu+znWRg+apq5mgta49wMbgOcIAvIkYaj7D+Bj7t6XY/9l4XX+OrL50wTdBtcAfwXcamaZkJwCbgO+ShCWvgq8x90Hw3PvBd5vZqvN7EyC1x6gipN/ppOec/hvy3uyaon6IMGHDk3AzQQfFMym9VJEFjiFJhFZcNx9t7tf5+7NBN2W1hG8Gc44HDl2KLxZEx7X7e79kWMPELyRIdwffQM52zeTx8M32RlDTLzBzOWP3b2OYMxJA8Gbyaivu3t95Ksz69zM9pfOUNeqrOtEx8bkeo7RbasIPuk/ENkWfc2musZU1kWvFQaztvB664COsFtXrms/BJwXBuSLCN4Arw9bky4GHpji8cavEV47n3qjwWrKn6OZ/YVNDO7/XLh5gGDMTMYKYCDrec0oDMl/DPyfmY4N3/h/DrjNJsbofBaoIBg3VA18k7ClKWzBeQPwqdnUFBoIv2c/x/7sA6eoaxi4y923hkH9Y8CrwhYdwvoqge8AD7v732df18xeQRB6ro62/rj7o+5+PAzw9xAE3jeH57yBoOX5dQS/068FvhC+FhC0Jj4GbAceJOgymwCOcvLPNPs5/z+CD0xOCndhXY+EHzqMuvuXgZ8TBHoRWSIUmkRkQXP3pwi6c12Qx+GdQKNFZtsi+KS7I7x9iMnBZX3W+UMEnzpnnDmrYqfg7k8QDG6/6RRbI07r4WfY1kXwxvGsyLboazbVNabSGb1W+HzXh9c7BDRlvQbjP4MwAG8jaKF40t3HCN7cfgDY6+5dOR7vUPQakcc7ldpP4u4f94nB/e8NN+8kmAQi48Wc3IUsHxcTtJLuMrPDwL8AF1swa1yuCTpiBL+fmUD7YuDWcIzOKEE3uYvDkPk6gq6oB8Nr/ynwljxaLQnHEh0i/+eYXdcOJr/umduZsWblBIGlgxwTaJjZSwjGE/2eu/8oe392uUx0ubuIoPtca9iyuhV4hCA84sH4yBvcvcndzwaOA9vCFqpngBIz2zzFc/4V4B/Dn00mcD9kU8ywl1WXiCwBCk0isqCY2fMsmGyhOby/nmD8ycMznRt2Q3qQYGxBhZldSDD26CvhIV8HPmxmDRbMtJU9oHs78PZwPMQVTHQNmwtfJuhS9KY5vOZpC98wfh34OzOrNbOzCELKqa679HXgf5jZr1gwnfOfEHSVepCgJSkF3GBmJWZ2JUFwiLqf4OeS6Yr306z72e4GXmhmbw4H6v8xk8PuEYJxK2Wn+HxyuQ34gJk1ha1Ff0IQ7HMyswqgPLxbHt6HoFVoI8Gb/YsIun49Blzk7ikLJrh4Sfj7uAL4v0APE7PsbQXeacFEHqXAHxB0pewi6CJ2TuTanyN4rX41j7oyz/Evw7+V5wG/n3mOedR1C/CbZnZRWNdfAT9z997w/p0ErVHvDFsio6/VBQQz7/2Ru38nx2t5tZnVmFnMzC4nGJe4JfJ6/FKmZSkMX79EOKYp8/OywCvCuj4C4y1m3wRuNLPqsMvflQTdByEY8/TiyOsJwcQSd5lZvZn9avhvTomZvYOge+l92fWLyOKl0CQiC00/wcQDj1gwu9vDwJPkP5j9bQRvRDsJJh34iLv/INx3I8EkEc8BPyR48xadyvz9BG+EegkG1X/rdJ5IVNhq8mmCN2pzrdcmr1vzgZlPmeSPCGYZ20cwMcRXgS+dSiHu/jTBG9nPELRivRF4o7uPha/BmwmCbG943HeZ/DO4n2AcyQNT3M9+vC7gt4BPELQcbCboGpXxY4LWgsNmlqul6iRmdq+Z/cU0h/w7QdeyJwh+N+8Ot2XOHzCzX4ocP8xEl7enwvuEXbkOZ74IxtAkwtsA9QRjgfoIJrg4F7giMjbtTwkmYngWOEbQHew3w2sPZV17ABjxYNa4aesKfSR8zAMEP4N/dPfv5VOXu/8Y+IvwdTka7s+0yLyKYIr2y5n8e5t5vf6EYAKRL0b2RVu43k/QQtVLMBX577v7T8PHvZ9gdsc7zayfYIKQj7t7ZrrzcwjC+yDBhxgfiuyDIHRWhjV/DXifu+8Mr3006/UE6ArH+JUStCQfI/id/yPgqvBvQUSWCJtlF2wRkSXDzN4HXOvuc9miJLNgZo8An3P3W2Y8WEREpEjU0iQiy4aZrTWzV4dde84n+FT7rmLXtZyY2WvN7MywG9O7CCbJ+N5M54mIiBSTVnYXkeWkjKAb1SaC7j23A/9W1IqWn/MJxj3VEHTtutrdDxW3JBERkempe56IiIiIiMg01D1PRERERERkGsuie96qVat848aNxS5DREREREQWqG3btnW5++pc+5ZFaNq4cSOtra3FLkNERERERBYoMzsw1T51zxMREREREZmGQpOIiIiIiMg0FJpERERERESmodAkIiIiIiIyDYUmERERERGRaSg0iYiIiIiITEOhSUREREREZBoFDU1mdoWZPW1me8zsQzn2f8DMdpnZDjP7kZmdFdn3LjN7Nvx6V2T7y8zsifCanzYzK+RzEBERERGR5a1gocnM4sBNwK8BLwDeZmYvyDrsMaDF3S8E7gT+ITy3EfgIcAlwMfARM2sIz/kscD2wOfy6olDPQUREREREpJAtTRcDe9x9n7uPAbcDV0YPcPefuPtQePdhoDm8/avAD9y92917gB8AV5jZWmCFuz/k7g7cBlxVwOcw57oGRotdgoiIiIiIzEIhQ1MT0Ba53x5um8q7gXtnOLcpvD3jNc3sejNrNbPWY8eOzbL0wnlkXzfbDvQUuwwREREREclTIUNTrrFGnvNAs98GWoB/nOHcvK/p7je7e4u7t6xevTqPcufPA88c4xfPdRe7DBERERERyUMhQ1M7sD5yvxnozD7IzN4A/B/gTe4+OsO57Ux04ZvymovBz/d08eCermKXISIiIiIiMyhkaNoKbDazTWZWBlwLbIkeYGYvAf6dIDAdjey6D7jczBrCCSAuB+5z90NAv5m9Ipw1753Atwv4HArqkee6eeCZhdN1UERERERETlZSqAu7e9LMbiAIQHHgS+6+08xuBFrdfQtBd7wa4I5w5vCD7v4md+82s78hCF4AN7p7pj/b+4BbgUqCMVD3sohtO9BDKu287vzVaPZ0EREREZGFx4JJ6Ja2lpYWb21tLXYZANy94xDPHOk/afsFTXW84flrFJxERERERIrAzLa5e0uufQVd3Fby92RHH/ftPEw6vfRDrIiIiIjIYqLQtIDsPtTPvU8eJqXgJCIiIiKyYCg0LTDPHOnnuzs6SabSxS5FRERERERQaFqQ9h0b5Ds7OkkoOImIiIiIFJ1C0wK1v2uIb2/vZCyp4CQiIiIiUkwKTQtYW/cQ33qsg9FkqtiliIiIiIgsWwpNC1xH7zDffLSDkYSCk4iIiIhIMSg0LQKH+0a4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\n",
"text/plain": [
"<Figure size 1008x720 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"def plot(rffs,results_sg, results_sk):\n",
" fig, axs = plt.subplots(nrows = 2, ncols = 1, figsize = (14,10))\n",
" library_list = ['Shogun','SKlearn']\n",
" results = [results_sg, results_sk]\n",
" for i in range(2):\n",
" axs[i].set_title(f'{library_list[i]} RFF Error logwidth:{log_width}')\n",
" axs[i].plot(rffs, np.mean(results[i], axis=0))\n",
" axs[i].set_xlabel('Number of Samples(D)')\n",
" axs[i].set_ylabel('Absolute error')\n",
" axs[i].fill_between(rffs,*np.percentile(results[i],[5,95],axis=0),alpha=0.5)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"tags": [
"outputPrepend",
"outputPrepend",
"outputPrepend"
]
},
"outputs": [],
"source": [
"#repeat number of times\n",
"results_sk = np.array([rff_curves_sk(rffs) for _ in range(num_repeat)])\n",
"results_sg = np.array([rff_curves_sg(rffs) for _ in range(num_repeat)])\n",
"\n",
"\n",
"plot(rffs,results_sg, results_sk)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.8.3 64-bit ('tf_gpu': conda)",
"language": "python",
"name": "python38364bittfgpucondab856a1d7f6e5478fa220cdcbe4204860"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
@karlnapf
Copy link

The bandwidth is a bit too large to be realistic

@karlnapf
Copy link

width = exp(log_width*2.0) * 2.0 this seems not right why is there a factor or 2 inside the exp?

@karlnapf
Copy link

in shogun, you can compare against the gaussian kernel computed with shogun, no need to implement your own

@karlnapf
Copy link

and the same for sklearn actually.

@karlnapf
Copy link

Because this still doesnt test whether the parametrization is the same you know. The results have to match when passing the same log_width to GaussianKernel and the RFF embedding

@jonpsy
Copy link
Author

jonpsy commented May 10, 2020

About the bandwidth, I've seen np.log(100) in our ipynb notebooks so I went with that(for ex: Gaussian Kernel in Classification.ipynb).
Next, here's what "get_width" gives return std::exp(m_log_width * 2.0) * 2.0.

@karlnapf
Copy link

that is probably for high dimensional data then?
Ok thanks for the formula, seems ok then. Still you want to compare against shogun's kernel not your own

@jonpsy
Copy link
Author

jonpsy commented May 10, 2020

Will be updated, be assured

@jonpsy
Copy link
Author

jonpsy commented Jun 6, 2020

Looks like it's done!

@karlnapf
Copy link

karlnapf commented Jun 7, 2020

Looks good now :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment