線性回歸

什么叫回歸浅萧,什么叫分類?

對連續(xù)型變量做預測叫回歸捐凭,對離散型變量做預測叫分類

線性回歸的主要任務是什么淑廊?

線性回歸的任務是找到一個從特征空間X到輸出空間Y的最優(yōu)的線性映射函數

什么是線性回歸

簡單地說就是,給定由d個屬性描述的示例

線性回歸試圖學得一個通過屬性的線性組合來進行預測的函數旧烧,即

簡單的線性回歸

在這里我們只討論一種最簡單的情形:輸入的屬性數目只有一個影钉。對于離散屬性,若屬性間存在“序”關系掘剪,可通過連續(xù)化將其轉化為連續(xù)值平委,例如二值屬性“身高”的取值“高”“矮”可轉化為{1.0,0.0}杖小,三值屬性“高度”的取值“高”“中”“低”肆汹,可轉化為{1.0,0.5予权,0.0}昂勉;若屬性間不存在序關系,假定有k個屬性值扫腺,則通常轉化為k維向量岗照,例如屬性“瓜類”的取值“西瓜”,“南瓜”笆环,“黃瓜”可轉化為(0,0,1),(0,1,0),(1,0,0).
線性回歸試圖學得


這里我們可以使用均方誤差確定w和b攒至。均方誤差是回歸任務中最常用的性能度量,因此我們試圖讓均方誤差最小化躁劣,即

基于均方誤差最小化來進行模型求解的方法稱為“最小二乘法”迫吐,在線性回歸中,最小二乘法就是試圖找到一條直線账忘,使所有樣本到直線上的歐式距離之和最小志膀。
求解w和b使上面公式最小化的過程熙宇,稱為線性回歸模型的最小二乘“參數估計”,分別對w和b求導可得

令上面兩條公式為零可得到w和b最優(yōu)解的閉式解

這里舉一個例子:這個例子是預測住房價格的溉浙,我們要使用一個數據集烫止。在這里,我要根據不同房屋尺寸所售出的價格戳稽,畫出我的數據集馆蠕。比方說,如果你朋友的房子是1250平方尺大小惊奇,你要告訴他們這房子能賣多少錢互躬。那么,你可以做的一件事就是構建一個模型颂郎,也許是條直線吨铸,從這個數據模型上來看,也許你可以告訴你的朋友祖秒,他能以大約220000(美元)左右的價格賣掉這個房子诞吱。


多元線性回歸

更多的情形,樣本是由多個屬性描述的竭缝,此時房维,我們試圖學得

類似的可利用最小二乘法來對w和b進行估計。

簡單的線性回歸實現

這是一個簡單的線性回歸抬纸,也就是只有一個變量的線性回歸咙俩。

import numpy as np

def fitSLR(x, y):
    '''
    訓練簡單線性模型
    '''
    n = len(x)      # 獲取數據集長度
    dinominator = 0 # 分母
    numerator = 0   # 分子
    for i in range(0, n):
        numerator += (x[i] - np.mean(x))*y[i] 
        dinominator += (x[i] - np.mean(x))**2
    b1 = numerator/float(dinominator) # 回歸線斜率
    b0 = np.mean(y)-b1*np.mean(x)     # 回歸線截距
    return b0, b1

def predict(x, b0, b1):
    '''
    根據學習算法做預測
    '''
    return b0 + x*b1

x = [1, 3, 2, 1, 3]
y = [14, 24, 18, 17, 27]

b0, b1 = fitSLR(x, y)

print("intercept:", b0, " slope:", b1)

x_test = 6

y_test = predict(6, b0, b1)

print("y_test:", y_test)

#輸出
#intercept: 10.0  slope: 5.0
#y_test: 40.0

我們也可以畫圖看看

# 畫圖
import matplotlib.pyplot as plt

y_perd = b0 + b1*np.array(x)

plt.scatter(x, y)  #散點圖
plt.plot(x, y_perd, color='black')
plt.xlabel("x")
plt.ylabel("y")
plt.axis([0, 6, 0, 30])  # 設置橫縱坐標的范圍
plt.show()

使用UCI大學公開的數據,跑線性回歸

數據的介紹:http://archive.ics.uci.edu/ml/datasets/Combined+Cycle+Power+Plant
數據的下載地址:http://archive.ics.uci.edu/ml/machine-learning-databases/00294/
下載的是一個壓縮包湿故,我們把他解壓后阿趁,是一個xlsx,我們可以先用excel把他打開坛猪,然后另存為.csv格式脖阵,方便我們讀取。
里面是一個循環(huán)發(fā)電場的數據墅茉,共有9568個樣本數據命黔,每個數據有5列,分別是:AT(溫度), V(壓力), AP(濕度), RH(壓強), PE(輸出電力)就斤。我們的問題是得到一個線性的關系悍募,對應PE是樣本輸出,而AT/V/AP/RH這4個是樣本特征洋机, 機器學習的目的就是得到一個線性回歸模型坠宴,即:
PE=θ0+θ1?AT+θ2?V+θ3?AP+θ4?RH
而需要學習的,就是θ0,θ1,θ2,θ3,θ4θ0,θ1,θ2,θ3,θ4這5個參數绷旗。

用pandas來讀取數據
import numpy as np
import pandas as pd

pd.set_option('display.max_columns', None)  # 輸出結果顯示全部列

# 讀取數據喜鼓,從第1行開始
data = pd.read_csv(r"ccpp.csv", header=0)

驗證一下看是否讀取成功,輸出數據的前5行

# 顯示數據的前五行忧设,如果是最后五行,用data.tail()颠通,默認為5行
print(data.head())
# 查看描述性統(tǒng)計,只能看數值型數據.
#print(data.describe())
準備運行算法的數據
# 顯示數據的維度
print(data.shape)
# 現在我們開始準備樣本特征X,我們用AT膀懈, V顿锰,AP和RH這4個列作為樣本特征
x = data[['AT', 'V', 'AP', 'RH']]
# 接著我們準備樣本輸出y, 我們用PE作為樣本輸出
y = data[['PE']]
劃分訓練集和數據集
# 劃分訓練集和測試集
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=0)
# 查看訓練集和測試集的維度
# print('x_train.shape:', x_train.shape)
# print('x__test.shape:', x_test.shape)
# print('y_train.shape:', y_train.shape)
# print('y_test.shape:', y_test.shape)
運行scikit-learn的線性模型
# 從sklearn庫中導入線性回歸函數
from sklearn.linear_model import LinearRegression
# 執(zhí)行函數獲得一個線性回歸模型
LR = LinearRegression()  # 這是一個未經訓練的機器學習模型
# 對模型傳入輸入數據x_train和輸出數據y_train
LR.fit(x_train, y_train)  # 這是一個經過訓練的機器學習模型

# 輸出線性回歸的截距和各個系數
print('LR.intercept_:', LR.intercept_)
print('LR.coef_:', LR.coef_)

輸出如下:
LR.intercept_: [452.84103716]
LR.coef_: [[-1.97313099 -0.23649993 0.06387891 -0.15807019]]
也就是說PE與其他的4個變量的關系如下:
PE=452.84103716?1.97313099?AT?0.23649993?V+0.06387891?AP?0.15807019?RH

評價模型

MSE (Mean Squared Error)叫做均方誤差



RMSE(Root Mean Squard Error)均方根誤差启搂。


圖片.png
# 評價模型硼控。這里使用MSE和RMSE來評價模型的好壞
y_pred = LR.predict(x_test)
# 引入sklearn模型評價工具庫
from sklearn import metrics
print("MSE: ", metrics.mean_squared_error(y_test, y_pred))
print("RMSE: ", np.sqrt(metrics.mean_squared_error(y_test, y_pred)))

輸出如下:
MSE: 19.73369930349765
RMSE: 4.442262858442491

畫圖觀察結果

這里畫圖顯示真實值和預測值的變化關系,離中間的直線y=x直接越近的點代表預測損失越低胳赌。

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
# 畫散點圖
ax.scatter(y_test, y_pred)
ax.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4)
# 設置標題
ax.set_title('Plot')
# 設置X軸標簽
ax.set_xlabel('Measured')
# 設置Y軸標簽
ax.set_ylabel('Predicted')
# 顯示所畫的圖
plt.show()


完整的代碼可以去我的碼云查看牢撼。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市疑苫,隨后出現的幾起案子熏版,更是在濱河造成了極大的恐慌,老刑警劉巖捍掺,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撼短,死亡現場離奇詭異,居然都是意外死亡挺勿,警方通過查閱死者的電腦和手機曲横,發(fā)現死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來不瓶,“玉大人禾嫉,你說我怎么就攤上這事∥秘ぃ” “怎么了熙参?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長麦备。 經常有香客問我尊惰,道長,這世上最難降的妖魔是什么泥兰? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任弄屡,我火速辦了婚禮,結果婚禮上鞋诗,老公的妹妹穿的比我還像新娘膀捷。我一直安慰自己,他們只是感情好削彬,可當我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布全庸。 她就那樣靜靜地躺著秀仲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪壶笼。 梳的紋絲不亂的頭發(fā)上神僵,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天,我揣著相機與錄音覆劈,去河邊找鬼保礼。 笑死,一個胖子當著我的面吹牛责语,可吹牛的內容都是我干的炮障。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼坤候,長吁一口氣:“原來是場噩夢啊……” “哼胁赢!你這毒婦竟也來了?” 一聲冷哼從身側響起白筹,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤智末,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后徒河,有當地人在樹林里發(fā)現了一具尸體吹害,經...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年虚青,在試婚紗的時候發(fā)現自己被綠了它呀。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡棒厘,死狀恐怖纵穿,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情奢人,我是刑警寧澤谓媒,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站何乎,受9級特大地震影響句惯,放射性物質發(fā)生泄漏。R本人自食惡果不足惜支救,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一抢野、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧各墨,春花似錦指孤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽结洼。三九已至,卻和暖如春叉跛,著一層夾襖步出監(jiān)牢的瞬間松忍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工筷厘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鸣峭,地道東北人。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓敞掘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親楣铁。 傳聞我的和親對象是個殘疾皇子玖雁,可洞房花燭夜當晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內容

  • 一. Numpy的主要功能 數組的算數和邏輯運算。 傅立葉變換和用于圖形操作的例程盖腕。 線性代數有關的操作赫冬。 Num...
    躺在稻田里的小白菜閱讀 788評論 0 1
  • “#本文參加“青春”征文大賽,本人保證本文為本人原創(chuàng)溃列,如有問題則與主辦方無關劲厌,自愿放棄評優(yōu)評獎資格” 贛南師范大學...
    易招娣閱讀 680評論 0 21
  • 卷積神經網絡類似于一般的神經網絡,由可學習的權重和誤差組成听隐,每一個神經元接受一些輸入补鼻,完成一些非線性的操作。整個神...
    與爾巖說閱讀 2,340評論 0 4
  • 6月2號雅任,堅持30天的寫作已經是最后一天风范, 首先感到的是輕松,最近工作開始忙起來沪么,時間安排緊張硼婿,加班又開始成為常...
    木本秋閱讀 311評論 0 0
  • 可能是我太過矯情 受過一次傷多久都不敢再提感情 時間久了,可以繼續(xù)跟別人嘻嘻哈哈的開玩笑禽车,但是只有自己...
    C藏好森林閱讀 271評論 0 4