Skip to content

Instantly share code, notes, and snippets.

@denny0323
Created January 29, 2018 05:30
Show Gist options
  • Save denny0323/1ecf4803ff7d32ff5ff9d1057cf413d8 to your computer and use it in GitHub Desktop.
Save denny0323/1ecf4803ff7d32ff5ff9d1057cf413d8 to your computer and use it in GitHub Desktop.
0.1_Gradient Descent
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from sympy import symbols, Derivative, solve\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Plotting example graph"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def f(x):\n",
" return x**4.+ 3.*(x**3.) + 2."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"x = np.linspace(-3, 1.)\n",
"y = f(x)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x2a5fc4f4e10>]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x2a5fc4f4e80>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.title('Gradient discent')\n",
"plt.plot(x, y, 'k')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### get extreme points"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"x, y = symbols('x, y')"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"d = Derivative(f(x), x).doit()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[-2.25000000000000, 0.0]"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# calculate extreme point\n",
"extreme = solve(d)\n",
"extreme # x= 2.25 and x =0"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The global optimum is -2.25\n",
"The local optimum is 0.00\n"
]
}
],
"source": [
"d2 = Derivative(f(x), x, 2).doit()\n",
"for i in extreme:\n",
" if d2.subs({x:i}) > 0:\n",
" print('The global optimum is %.2f' %i)\n",
" else : \n",
" print('The local optimum is %.2f' %i)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### get optimal point"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"end at 0.00\n"
]
}
],
"source": [
"cur_x = 1\n",
"step_size = 0.01\n",
"precision = .000001\n",
"pre_step_size = cur_x\n",
"\n",
"while pre_step_size > precision:\n",
" pre_x = cur_x\n",
" cur_x = pre_x - step_size * d.subs({x:pre_x})\n",
" pre_step_size = abs(pre_x-cur_x)\n",
"print('end at %.2f' %cur_x)"
]
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python [default]",
"language": "python",
"name": "python3"
},
"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.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment