1. 程式人生 > >迴歸演算法——python實現線性迴歸

迴歸演算法——python實現線性迴歸

演算法簡介

給定資料集D={(x1,y1),(x2,y2),…,(xm,ym)},一共有m個樣本,其中每個樣本有d個屬性,即xi = (xi1,xi2,…,xid)。線性迴歸是試圖學到一個線性模型 f(x) = w1*x1+w2*x2+…+wd*xd + b以儘可能準確的預測實值輸出標記。 其中w=(w1,w2,…,wd), w和b是通過學習之後,模型得以確定。
w和b的確定是通過損失函式確定的:
這裡寫圖片描述

用最小二乘法對w和b進行估計。把w和b吸收入向量形式,w’ = (w;b),相應的資料集D表示為一個m*(d+1)的矩陣X,其中每一行對應一個示例,該行前d個元素對應於示例的d個屬性值,最後一個元素恆為1。則對於上面的公式有:
這裡寫圖片描述


對w’求導得:
這裡寫圖片描述
令上式為零(當X^TX為滿秩矩陣或正定矩陣時可得):
這裡寫圖片描述
令xi’ = (xi;1)則線性迴歸模型為:
這裡寫圖片描述

python實現過程

訓練得到w和b的向量:

def train_wb(X, y):
    """
    :param X:N*D的資料
    :param y:X對應的y值
    :return: 返回(w,b)的向量
    """
    if np.linalg.det(X.T * X) != 0:
        wb = ((X.T.dot(X).I).dot(X.T)).dot(y)
        return wb

獲得資料的函式,其中資料下載自

def getdata():
    x = []; y = []
    file = open("C:\\Users\\cjwbest\\Desktop\\ex0.txt", 'r')
    for line in file.readlines():
        temp = line.strip().split("\t")
        x.append([float(temp[0]),float(temp[1])])
        y.append(float(temp[2]))
    return (np.mat(x), np.mat(y).T)

畫圖函式,分別把訓練用的資料的散點圖還有迴歸直線畫出來了。

def draw(x, y, wb):

    #畫迴歸直線y = wx+b
    a = np.linspace(0, np.max(x)) #橫座標的取值範圍
    b = wb[0] + a * wb[1]
    plot(x, y, '.')
    plot(a, b)
    show()

整體程式碼如下:

#-*- coding:utf-8 -*-

import numpy as np
from pylab import *

def train_wb(X, y):
    """
    :param X:N*D的資料
    :param y:X對應的y值
    :return: 返回(w,b)的向量
    """
    if np.linalg.det(X.T * X) != 0:
        wb = ((X.T.dot(X).I).dot(X.T)).dot(y)
        return wb

def test(x, wb):
    return x.T.dot(wb)

def getdata():
    x = []; y = []
    file = open("ex0.txt", 'r')
    for line in file.readlines():
        temp = line.strip().split("\t")
        x.append([float(temp[0]),float(temp[1])])
        y.append(float(temp[2]))
    return (np.mat(x), np.mat(y).T)

def draw(x, y, wb):

    #畫迴歸直線y = wx+b
    a = np.linspace(0, np.max(x)) #橫座標的取值範圍
    b = wb[0] + a * wb[1]
    plot(x, y, '.')
    plot(a, b)
    show()

X, y = getdata()
wb = train_wb(X, y)
draw(X[:, 1], y, wb.tolist())

執行結果如圖所示:
這裡寫圖片描述

相關推薦

迴歸演算法——python實現線性迴歸

演算法簡介 給定資料集D={(x1,y1),(x2,y2),…,(xm,ym)},一共有m個樣本,其中每個樣本有d個屬性,即xi = (xi1,xi2,…,xid)。線性迴歸是試圖學到一個線性模型 f(x) = w1*x1+w2*x2+…+wd*xd + b以

Python實現線性迴歸2,梯度下降演算法

接上篇 4.梯度下降演算法 《斯坦福大學公開課 :機器學習課程》吳恩達講解第二課時,是直接從梯度下降開始講解,最後採用向量和矩陣的方式推導瞭解析解,國內很多培訓視訊是先講解析解後講梯度下降,個人認為梯度下降演算法更為重要,它是很多演算法(邏輯迴歸、神經網路)都可

機器學習經典演算法詳解及Python實現--線性迴歸(Linear Regression)演算法

(一)認識迴歸 迴歸是統計學中最有力的工具之一。機器學習監督學習演算法分為分類演算法和迴歸演算法兩種,其實就是根據類別標籤分佈型別為離散型、連續性而定義的。顧名思義,分類演算法用於離散型分佈預測,如前

Python實現線性迴歸和邏輯迴歸演算法

本文使用python實現了線性迴歸和邏輯迴歸演算法,並使用邏輯迴歸在實際的資料集上預測疝氣病症病馬的死亡率(當然這裡我們的線性迴歸和邏輯迴歸實現是原生的演算法,並沒有考慮正則化係數問題,後期會將其補充完整)。 一、線性迴歸 1.模型表示 2.損失函式

python實現線性迴歸.md

python實現線性迴歸 一、相關數學推導 1.問題描述 所謂線性迴歸,就是給你一批資料比如房子的面積以及房子的價格,然後你所做的就是找到一條線能儘量的擬合這一批資料。如下所示。 其中紅色點就是給出的資料集合,有size代表面積,而price代表價格,紅色點點就代表

8種方法用Python實現線性迴歸,為你解析最高效選擇

來源:大資料文摘編譯:丁慧、katherine Hou、錢天培作者:TirthajyotiSar

一文教你全面掌握用Python實現線性迴歸

全文共4968字,預計學習時長15分鐘或更長 本文旨在為讀者理解和應用線性迴歸時提供參考。雖然線性迴歸演算法很簡單,但是隻有

梯度下降法實現最簡單線性迴歸問題python實現

梯度下降法是非常常見的優化方法,在神經網路的深度學習中更是必會方法,但是直接從深度學習去實現,會比較複雜。本文試圖使用梯度下降來優化最簡單的LSR線性迴歸問題,作為進一步學習的基礎。 import numpy as np import pandas as pd from numpy import *

c++實現線性迴歸(高斯消元)(附python實現

前言 寫這次blog的契機是上次筆試的時候,遇到了這個問題 當時以為numpy庫是可以用的,就先寫了個python版,結果並不能用。。 最後憤然寫了個c++版 不過最後一個小問題導致我差了兩分鐘沒交上去程式碼,所以這一版原始碼只是通過了案例但沒有提交ac。。

基於sciket-learn實現線性迴歸演算法

線性迴歸演算法主要用來解決迴歸問題,是許多強大的非線性模型的基礎,無論是簡單線性迴歸,還是多元線性迴歸,思想都是一樣的,假設我們找到了最佳擬合方程(對於簡單線性迴歸,多元線性迴歸對應多個特徵作為一組向量)y=ax+b,則對於每一個樣本點xi,根據我們的直線方程,預測值為y^i = axi + b,真

基於Ubuntu16.04+Spark+Python線性迴歸(linear regression)演算法

參考: spark+python+ubuntu環境配置: https://blog.csdn.net/konglingshneg/article/details/82491157 Building A Linear Regression with PySpark and MLl

Python實現邏輯迴歸演算法(一)

本次用Python實現邏輯迴歸演算法,邏輯迴歸是應用非常廣泛的一個分類及其學習演算法,它將資料擬合到一個logit函式中,從而完成對事件發生的概率進行預測。本次學習筆記主要參考了《Python進行資料分析與挖掘實踐》和作者@寒小陽的部落格,地址如下:http://blog.c

TensorFlow——實現線性迴歸演算法

import tensorflow as tf import numpy as np import matplotlib.pyplot as plt #使用numpy生成200個隨機點 x_data=np.linspace(-0.5,0.5,200)[:,np.newaxis] noise=np.rand

利用批量梯度下降和正規方程求解線性迴歸引數(Python實現)

說明:本文使用的工具為Python3+Jupyter Notebook。 利用批量梯度下降 先匯入要用到的各種包: %matplotlib notebook import numpy as np import pandas as pd import matplotlib.pyplot a

機器學習演算法 之邏輯迴歸以及python實現

下面分為兩個部分: 1. 邏輯迴歸的相關原理說明 2. 通過python程式碼來實現一個梯度下降求解邏輯迴歸過程 邏輯迴歸(Logistic Regression) 首先需要說明,邏輯迴歸屬於分類演算法。分類問題和迴歸問題的區別在於,分類問題的輸出是離散

NG機器學習總結-(三)線性迴歸以及python實現

在前面已經簡單介紹了迴歸問題(預測房價),其實在統計學中,線性迴歸(Linear Regression)是利用被稱為線性迴歸方程的最小平方函式(Cost Function)對一個或多個自變數和因變數之間關係進行建模的一種迴歸分析。這種函式式一個或多個被稱為迴歸係數的模型引數的

【機器學習演算法-python實現】邏輯迴歸實現(LogicalRegression)

1.背景知識在剛剛結束的天貓大資料s1比賽中,邏輯迴歸是大家都普遍使用且效果不錯的一種演算法。(1)迴歸         先來說說什麼是迴歸,比如說我們有兩類資料,各有50十個點組成,當我門把這些點畫出

二,機器學習演算法之邏輯迴歸python實現

邏輯迴歸(Logistic Regression)是目前流行最廣泛的演算法之一。 1. 何為邏輯迴歸:        邏輯迴歸主要思想是根據現有的訓練集(資料)進行分類,判斷這些資料屬於哪一個類別,通

python實現logistic迴歸演算法

''' logistic迴歸函式 ''' from __future__ import print_function import tensorflow as tf #匯入MNIST資料 from tensorflow.examples.tutorial

線性迴歸python實現

  最近在學習機器學習的一些演算法,從最開始的線性迴歸開始。線性迴歸其實就是用一條直線來模擬你的資料,並且讓所產生的誤差儘可能的小。#coding=utf-8 import random import