Skip to content

Instantly share code, notes, and snippets.

@EthanRosenthal
Created March 15, 2016 02:24
Show Gist options
  • Save EthanRosenthal/c1ae70188c2e4705fb32 to your computer and use it in GitHub Desktop.
Save EthanRosenthal/c1ae70188c2e4705fb32 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Factors: 5\n",
"Regularization: 0.001\n",
"New optimal hyperparameters\n",
"model <__main__.ExplicitMF instance at 0x7fa542e676c8>\n",
"n_factors 5\n",
"n_iter 200\n",
"reg 0.001\n",
"test_mse 0.8545089\n",
"train_mse 0.6744243\n",
"dtype: object\n",
"Regularization: 0.01\n",
"New optimal hyperparameters\n",
"model <__main__.ExplicitMF instance at 0x7fa542fc5830>\n",
"n_factors 5\n",
"n_iter 200\n",
"reg 0.01\n",
"test_mse 0.8027033\n",
"train_mse 0.6791589\n",
"dtype: object\n",
"Regularization: 0.1\n",
"Regularization: 1.0\n",
"Factors: 10\n",
"Regularization: 0.001\n",
"Regularization: 0.01\n",
"Regularization: 0.1\n",
"Regularization: 1.0\n",
"Factors: 20\n",
"Regularization: 0.001\n",
"Regularization: 0.01\n",
"New optimal hyperparameters\n",
"model <__main__.ExplicitMF instance at 0x7fa542e678c0>\n",
"n_factors 20\n",
"n_iter 200\n",
"reg 0.01\n",
"test_mse 0.8024764\n",
"train_mse 0.5011374\n",
"dtype: object\n",
"Regularization: 0.1\n",
"Regularization: 1.0\n",
"Factors: 40\n",
"Regularization: 0.001\n",
"Regularization: 0.01\n",
"New optimal hyperparameters\n",
"model <__main__.ExplicitMF instance at 0x7fa542e67638>\n",
"n_factors 40\n",
"n_iter 200\n",
"reg 0.01\n",
"test_mse 0.7795661\n",
"train_mse 0.4457796\n",
"dtype: object\n",
"Regularization: 0.1\n",
"Regularization: 1.0\n",
"Factors: 80\n",
"Regularization: 0.001\n",
"Regularization: 0.01\n",
"New optimal hyperparameters\n",
"model <__main__.ExplicitMF instance at 0x7fa542f9f710>\n",
"n_factors 80\n",
"n_iter 200\n",
"reg 0.01\n",
"test_mse 0.7644358\n",
"train_mse 0.4644771\n",
"dtype: object\n",
"Regularization: 0.1\n",
"Regularization: 1.0\n"
]
}
],
"source": [
"iter_array = [1, 2, 5, 10, 25, 50, 100, 200]\n",
"latent_factors = [5, 10, 20, 40, 80]\n",
"regularizations = [0.001, 0.01, 0.1, 1.]\n",
"regularizations.sort()\n",
"\n",
"best_params = {}\n",
"best_params['n_factors'] = latent_factors[0]\n",
"best_params['reg'] = regularizations[0]\n",
"best_params['n_iter'] = 0\n",
"best_params['train_mse'] = np.inf\n",
"best_params['test_mse'] = np.inf\n",
"best_params['model'] = None\n",
"\n",
"for fact in latent_factors:\n",
" print 'Factors: {}'.format(fact)\n",
" for reg in regularizations:\n",
" print 'Regularization: {}'.format(reg)\n",
" MF_SGD = ExplicitMF(train, n_factors=fact, learning='sgd',\\\n",
" user_fact_reg=reg, item_fact_reg=reg, \\\n",
" user_bias_reg=reg, item_bias_reg=reg)\n",
" MF_SGD.calculate_learning_curve(iter_array, test, learning_rate=0.001)\n",
" min_idx = np.argmin(MF_SGD.test_mse)\n",
" if MF_SGD.test_mse[min_idx] < best_params['test_mse']:\n",
" best_params['n_factors'] = fact\n",
" best_params['reg'] = reg\n",
" best_params['n_iter'] = iter_array[min_idx]\n",
" best_params['train_mse'] = MF_SGD.train_mse[min_idx]\n",
" best_params['test_mse'] = MF_SGD.test_mse[min_idx]\n",
" best_params['model'] = MF_SGD\n",
" print 'New optimal hyperparameters'\n",
" print pd.Series(best_params)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fa542e51210>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_learning_curve(iter_array, best_params['model'])"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Best regularization: 0.01\n",
"Best latent factors: 80\n",
"Best iterations: 200\n"
]
}
],
"source": [
"print 'Best regularization: {}'.format(best_params['reg'])\n",
"print 'Best latent factors: {}'.format(best_params['n_factors'])\n",
"print 'Best iterations: {}'.format(best_params['n_iter'])"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.11"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment