Python|机器学习-一元线性回归

<p>一元线性回归模型很简单<br /></p><p><br /></p><p>y1=ax+b+ε,y1为实际值,ε为正态的误差。</p><p>y2=ax+b,y2为预测值。</p><p>ε=y1-y2。</p><section class="code-snippet__fix code-snippet__js"><pre class="code-snippet__js" data-lang="ruby"><code><span class="code-snippet_outer"><span class="code-snippet__function"><span class="code-snippet__keyword">def</span> <span class="code-snippet__title">model</span><span class="code-snippet__params">(a,b,x)</span></span>:</span></code><code><span class="code-snippet_outer">  <span class="code-snippet__comment"># x is vector,a and b are the common number.</span></span></code><code><span class="code-snippet_outer"> <span class="code-snippet__keyword">return</span> ax+b</span></code></pre></section><p>这里将整组数据的预测结果方差作为损失函数。</p><p><br /></p><p>J(a,b)=sum((y1-y2)^2)/n</p><section class="code-snippet__fix code-snippet__js"><pre class="code-snippet__js" data-lang="typescript"><code><span class="code-snippet_outer">def cost(a,b,x,y):</span></code><code><span class="code-snippet_outer">    # x is argu, y is actual result.    </span></code><code><span class="code-snippet_outer">    n=len(x)</span></code><code><span class="code-snippet_outer">    <span class="code-snippet__keyword">return</span> np.square(y-ax-b).sum()/n</span></code></pre></section><p>优化函数则进行使损失函数,即方差最小的方向进行搜索</p><p>a=a-theta(<span >∂</span>J/<span >∂</span>a)<br /></p><p>b=b-theta(<span >∂</span>J/<span >∂b</span>)</p><p>这里的解释就是,对影响因素a或b求损失函数J的偏导,如果损失函数随着a或b增大而增大,我们就需要反方向搜索,使得损失函数变小。</p><p>对于偏导的求取则看的别人的推导公式<img src="https://upload-images.jianshu.io/upload_images/3799916-85217c78849c7b77.png" data-ratio="1" data-type="xmt-emoji" data-w="19" /><img src="https://upload-images.jianshu.io/upload_images/3799916-5bad3f4474d6baea.png" data-ratio="1" data-type="xmt-emoji" data-w="19" /><br /></p><p><br /></p><p>theta为搜索步长,影响速度和精度(我猜的,实际没有验证)<br /></p><section class="code-snippet__fix code-snippet__js"><pre class="code-snippet__js" data-lang="properties"><code><span class="code-snippet_outer"><span class="code-snippet__meta">def optimize(a,b,x,y)</span>:</span></code><code><span class="code-snippet_outer"><span class="code-snippet__meta">    theta </span>=<span class="code-snippet__string"> 1e-1  # settle the step as 0.1</span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__meta">    n</span>=<span class="code-snippet__string">len(x)</span></span></code><code><span class="code-snippet_outer"> <span class="code-snippet__attr">y_hat</span> = <span class="code-snippet__string">model(a,b,x)</span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__comment">    # compute forecast values</span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__meta">    da </span>=<span class="code-snippet__string"> ((y_hat-y)x).sum()/n</span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__meta">    db </span>=<span class="code-snippet__string"> (y_hat-y).sum()/n</span></span></code><code><span class="code-snippet_outer"> <span class="code-snippet__attr">a</span> = <span class="code-snippet__string">a - thetada</span></span></code><code><span class="code-snippet_outer"> <span class="code-snippet__attr">b</span> = <span class="code-snippet__string">b - theta*db</span></span></code><code><span class="code-snippet_outer"><span class="code-snippet__attr">    return a, b</span></span></code></pre></section><p>使用sklearn库,可以使用现成的线性回归模型<br /></p><section class="code-snippet__fix code-snippet__js"><pre class="code-snippet__js" data-lang="makefile"><code><span class="code-snippet_outer">import numpy as np</span></code><code><span class="code-snippet_outer">from sklearn.linear_model import LinearRegression</span></code><code><span class="code-snippet_outer">import matplotlib.pyplot as plt</span></code><code><span class="code-snippet_outer"><br /></span></code><code><span class="code-snippet_outer">x = [1,2,4,5,6,6,7,9]</span></code><code><span class="code-snippet_outer">x = np.reshape(x,newshape=(8,1))</span></code><code><span class="code-snippet_outer">y =  [10,9,9,9,7,5,3,1]</span></code><code><span class="code-snippet_outer">y = np.reshape(y,newshape=(8,1))</span></code><code><span class="code-snippet_outer"><span class="code-snippet__comment"># create an instance of LinearRegression model</span></span></code><code><span class="code-snippet_outer">lr = LinearRegression()</span></code><code><span class="code-snippet_outer"><span class="code-snippet__comment"># train model</span></span></code><code><span class="code-snippet_outer">lr.fit(x,y)</span></code><code><span class="code-snippet_outer">lr.score(x,y)</span></code><code><span class="code-snippet_outer"><span class="code-snippet__comment"># compute y_hat</span></span></code><code><span class="code-snippet_outer">y_hat = lr.predict(x)</span></code><code><span class="code-snippet_outer"><span class="code-snippet__comment"># show the result</span></span></code><code><span class="code-snippet_outer">plt.scatter(x,y)</span></code><code><span class="code-snippet_outer">plt.plot(x, y_hat)</span></code><code><span class="code-snippet_outer">plt.show()</span></code></pre></section><p ><img class="rich_pages" data-ratio="0.8429878048780488" data-s="300,640" src="https://upload-images.jianshu.io/upload_images/3799916-0911d64d83daf64a" data-type="png" data-w="656" ></p>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容