python回歸分析總結--回歸模型及調優

2021-02-20 數據運營與數據分析
回歸分析及模型優化1、回歸分析概括

目標值(因變量)是連續型數據,通過某種函數關係找到因變量和自變量之間的關係,進而預測目標。

通過不斷擬合縮小預測值與真實值的差距:最終使得這個差距(誤差項)成為一組均值為0,方差為1的隨機數。2、損失函數

總損失定義為:說明:

優化模型的目標就是如何儘可能的減少損失。

3、優化算法

使得損失函數值達到最小的方法:正規方程、梯度下降。

正規方程右上角的-1表示逆矩陣(np.linalg.inv(X))w = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)梯度下降

理解:a為學習速率,需要手動指定的超參數,a旁邊的的整體表示方向,沿著這個函數的下降的方向找,最終山谷的最低點,然後更新w值使用。其中a設置過大可能會只找到局部最優解。

4、python的APIstatsmodels.formula.api.OLS():普通最小二乘模型擬合- - 常用scipy.stats.linregress(): 線性擬合scipy.optimize.curve_fit():回歸函數擬合5、python機器學習線性模型API正規方程法計算

sklearn.linear_model.LinearRegressiont(fit_intercept=True)

fit_intercept:True/False,是否計算偏置(截距)LinearRegression.coef_:返回回歸係數LinearRegression.intercept_:返回偏置(截距)梯度下降法計算

sklearn.linear_model.SGDRegressor(loss="squared_loss",fit_intercept=True,learning_rate ="invscaling",eta0=0.01)

SGDRegressor類實現了隨機梯度下降學習優化,它支持不同的loss函數和正則化懲罰項來擬合線性回歸模型。loss="squared_loss":普通最小二乘法fit_intercept:是否計算偏置(截距) True/Falselearning_rate: 迭代過程中學習率的計算方式:"optimal":eta=1.0/(alpha*(t+t0))[default]"invscaling":eta=eta0/pow(t,power_t),power_t=0.25:存在父類當中對於一個常數值的學習率來說,可以使用learning_rate='constant',並使用eta0來指定學習率。SGDRegressor.coef_:返回回歸係數SGDRegressor.intercept_:返回偏置更多:https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDRegressor.html6、機器學習中回歸性能評估

均方誤差(MSE)越小,模型相對越好。其中m為樣本數,y_i為預測值,y~為真實值。

回歸性能評估APIfrom sklearn.metrics import mean_squared_error  #均方誤error = mean_squared_error(y_true,y_pred)7、欠擬合和過擬合過擬合:模型過於複雜,訓練集上準確率很高,但測試集上效果差。過擬合原因:原始特徵過多,存在嘈雜特徵,模型過於複雜,模型嘗試去兼顧各個測試數據點。過擬合線性模型解決辦法:正則化:L1正則化,L2正則化。L2正則化作用:可以使得其中一些W的值很小,消弱某個特徵的影響。優點:越小的參數說明模型越簡單,越簡單的模型越不容易產生過度擬合。加入L2正則化後的損失函數(m為樣本數;n為特徵數;alpha(𝜆)正則化力度,懲罰項係數,正則化力度越大,權重係數會越小,正則化力度越小,權重係數會越大):L1正則化作用:可以使一些特徵的W值等於0,刪除這個特徵的影響改進模型:LASSO回歸8、線性回歸的改進–嶺回歸

嶺回歸,其實也是一種線性回歸。只不過在篩法建立回歸方程時候,加上L2正則化的限制,從而達到解決過擬合的效果。

sklearn.linear_model.Ridge(alpha=1.0,fit_intercept=True,solver=「auto」,nomalize=False)alpha:正則化力度,懲罰項係數(𝜆)。正則化力度越大,權重係數會越小,正則化力度越小,權重係數會越大。取值:0~1,1~10sag:如果數據集、特徵都比較大,選擇隨機梯度下降優化normalize=False:可以在fit之前調用preprocessing.StandardScaler標準化數據,自動對數據進行標準化Ridge.intercept_:回歸偏置(截距)更多:https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Ridge.html9、案例代碼
import numpy as np
import pandas as pd
from sklearn.datasets import load_boston  #sklearn波士頓房價預測數據接口
from sklearn.model_selection import train_test_split  #劃分數據集
from sklearn.preprocessing import StandardScaler    #數據標準化
from sklearn.linear_model import LinearRegression, SGDRegressor, Ridge  #預估器(正規方程)、預估器(梯度下降學習)、嶺回歸
from sklearn.metrics import mean_squared_error  #均方誤
import joblib   #模型的加載與保存

def linear1():
    """
    正規方程的優化方法對波士頓房價進行預測
    :return:
    """
    # 1)獲取數據
    boston = load_boston()#sklearn波士頓房價預測數據

    # 2)劃分數據集
    x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=22)

    # 3)標準化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)

    # 4)正規方程-預估器
    estimator = LinearRegression()
    estimator.fit(x_train, y_train)

    # 5)得出模型
    print("正規方程-回歸係數為:\n", estimator.coef_)
    print("正規方程-截距(偏置)為:\n", estimator.intercept_)

    # 6)模型評估
    y_predict = estimator.predict(x_test)
    # print("預測房價:\n", y_predict)
    error = mean_squared_error(y_test, y_predict)
    print("正規方程-均方誤差為:\n", error)

    return None


def linear2():
    """
    梯度下降的優化方法對波士頓房價進行預測
    :return:
    """
    # 1)獲取數據
    boston = load_boston()
    print("特徵數量:\n", boston.data.shape)

    # 2)劃分數據集
    x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=22)

    # 3)標準化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)

    # 4)梯度下降-預估器
    estimator = SGDRegressor(learning_rate="constant", eta0=0.01, max_iter=10000, penalty="l1")
    estimator.fit(x_train, y_train)

    # 5)得出模型
    print("梯度下降-回歸係數為:\n", estimator.coef_)
    print("梯度下降-截距為:\n", estimator.intercept_)

    # 6)模型評估
    y_predict = estimator.predict(x_test)
    # print("預測房價:\n", y_predict)
    error = mean_squared_error(y_test, y_predict)
    print("梯度下降-均方誤差為:\n", error)

    return None


def linear3():
    """
    嶺回歸對波士頓房價進行預測
    :return:
    """
    # 1)獲取數據
    boston = load_boston()
    print("特徵數量:\n", boston.data.shape)

    # 2)劃分數據集
    x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=22)

    # 3)標準化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)

    # 4) 嶺回歸-預估器
    estimator = Ridge(alpha=0.5, max_iter=10000)
    estimator.fit(x_train, y_train)

    # 保存模型
    joblib.dump(estimator, "my_ridge.pkl")
    
    # 加載模型 使用時註銷 4)預估器 和 保存模型
    # estimator = joblib.load("my_ridge.pkl")

    # 5)得出模型
    print("嶺回歸-權重係數為:\n", estimator.coef_)
    print("嶺回歸-偏置(截距)為:\n", estimator.intercept_)

    # 6)模型評估
    y_predict = estimator.predict(x_test)
    # print("預測房價:\n", y_predict)
    error = mean_squared_error(y_test, y_predict)
    print("嶺回歸-均方誤差為:\n", error)

    return None

if __name__ == "__main__":
    # 代碼1:正規方程的優化方法對波士頓房價進行預測
    linear1()
    # 代碼2:梯度下降的優化方法對波士頓房價進行預測
    linear2()
    # 代碼3:嶺回歸對波士頓房價進行預測
    linear3()

相關焦點

  • 大數據分析python自回歸模型
    因此,在大數據分析python自回歸模型中,我們將討論一個反映這種相關性的模型。–自回歸模型。 自回歸模型或簡稱為AR模型,僅依靠過去的時間值來預測當前值。這是一個線性模型,其中當前期間的值是過去結果的總和乘以數字因子。我們將其表示為AR(p),其中「 p」稱為模型的階數,表示我們要包括的滯後值的數量。
  • python數據分析--回歸函數及線性回歸分析
    1.常見的回歸函數2.工具數據分析有很多成熟的工具可以使用,如R、python、此處我們選用python進行分析。首先,我們需要安裝並導入python數據分析常用的庫。__version__)3.線性回歸分析Y= aX + b + e ,e表示殘差。
  • python多重線性回歸分析
    python多重線性回歸分析多重線性回歸分析定義多重線性回歸模型:MulitipleLinear Regression多元線性回歸模型:Multivariate Linear Regression數據準備#多重線性回歸#數據準備import pandas as pddf=pd.read_csv('e:/python/out/corr.csv',encoding='utf8')
  • python機器學習--線性回歸
    python機器學習--線性回歸線性回歸是最簡單的機器學習模型,其形式簡單,易於實現,同時也是很多機器學習模型的基礎。對於一個給定的訓練集數據,線性回歸的目的就是找到一個與這些數據最吻合的線性函數。針對線性回歸算法在之前的數模案例也有涉及喔,歡迎去看看上一篇博客數學建模預測模型實例--大學生體測數據模型在這裡插入圖片描述OLS線性回歸Ordinary Least Squares 最小二乘法一般情況下,線性回歸假設模型為下,其中w為模型參數
  • 使用單行代碼評估回歸模型的Python包
    對此的一個內聯嘗試是python包「 regressormetricgraphplot」的開發,該軟體包旨在幫助用戶使用單行代碼繪製評估指標圖,以針對不同的廣泛使用的回歸模型指標進行一目了然的比較。使用該實用程序包,還可以通過將其應用於日常的預測回歸問題,顯著降低從業人員以業餘方式評估不同機器學習算法的障礙。
  • Logistic回歸理論與模型簡介
    一、線性模型與嶺回歸(一)線性模型給定由m個屬性表示的特徵向量X=(x1,x2,x3,...硬分類的代表為感知機、線性判別分析(Fisher LDA),而軟分類則包括了logistic回歸,樸素貝葉斯分類器(naivebayes classifier),高斯判別分析(Gaussian discriminant analysismodel)等。 Logistic回歸是一個著名的線性分類算法,利用Logistic回歸可以將線性回歸問題很好地轉化成一個線性二分類問題。
  • 用 Python 進行多元線性回歸分析(附代碼)
    很多人在做數據分析時會經常用到一元線性回歸,這是描述兩個變量間統計關係的最簡單的回歸模型。但現實問題中,我們往往會碰到多個變量間的線性關係的問題,這時就要用到多元線性回歸,多元線性回歸是一元回歸的一種推廣,其在實際應用中非常廣泛,本文就用python代碼來展示一下如何用多元線性回歸來解決實際問題。圖1.
  • Python 實戰多元線性回歸模型,附帶原理+代碼
    來源 | 早起Python( ID:zaoqi-python )「多元線性回歸模型」非常常見,是大多數人入門機器學習的第一個案例,儘管如此,裡面還是有許多值得學習和注意的地方。,這裡需要轉換一下,而多元線性回歸模型中類別變量的轉換最常用的方法之一便是將其轉化成虛擬變量。
  • python金融風控評分卡模型和數據分析
    python金融風控評分卡模型和數據分析微專業課:http://dwz.date/b9vv作者Toby:持牌照消費金融模型專家
  • 多重線性回歸
    python多重線性回歸分析多重線性回歸分析定義>多重線性回歸模型:Mulitiple Linear Regression多元線性回歸模型:Multivariate Linear Regression數據準備#多重線性回歸
  • 非線性回歸模型--多項式回歸
    回歸分析可分為線性回歸和非線性回歸。線性回歸分析相信大家都已經非常熟悉了,它主要分析有線性回歸趨勢的兩個變量間的關係。但是在處理許多實際問題時,變量間的關係並非直線關係,例如細菌生長曲線、藥物動力學、毒物劑量與動物死亡率的關係等等。
  • 線性回歸分析思路總結!簡單易懂又全面!
    Step4:散點圖和相關分析一般來說,回歸分析之前需要做相關分析,原因在於相關分析可以先了解是否有關係,回歸分析是研究有沒有影響關係,有相關關係但並不一定有回歸影響關係。當然回歸分析之前也可以使用散點圖直觀查看數據關係情況等。
  • 多元線性回歸、逐步回歸、邏輯回歸的總結
    在這個高級語言層出不窮的年代,這樣做顯然不明智,所以我考慮用優秀的數據分析工具——R語言(不敢說最優秀,雖然心裡是這麼想的,我怕有人要罵我!)做回歸分析。包括簡單多變量回歸、逐步回歸、邏輯回歸!對了,上次,用Python寫的兩篇回歸擬合分別是:基於最小二乘法的——線性回歸擬合(一)基於梯度下降法的——線性回歸擬合(二)多元回歸分析,生活中用的很多,因為一個因素可能與很多其它因素有關!言歸正傳,這裡考慮用R語言裡面的相關函數做回歸分析。
  • 利用廣義線性模型實現的分類——Logistic回歸
    ——嶺回歸與LASSO回歸》講的是利用廣義線性模型實現的線性回歸以及它的正則化——嶺回歸和LASSO回歸,它們解決的都是對連續數值進行預測的回歸問題,其實我們還可以利用回歸的思想來解決分類問題,這就是我們今天要介紹的Logistic回歸。
  • 第196講 Python——線性模型|邏輯回歸|算法
    們在講機器學習模型之前,首先要了解兩個最簡單的機器學習或統計學習模型,那就是線性模型和邏輯回歸
  • Python 機器學習:多元線性回歸
    python機器學習:線性回歸往下講,這篇文章要講解的多元線性回歸。1、什麼是多元線性回歸模型?當y值的影響因素不唯一時,採用多元線性回歸模型。例如商品的銷售額可能不電視廣告投入,收音機廣告投入,報紙廣告投入有關係,可以有 sales =β0+β1*TV+β2* radio+β3*newspaper.
  • 七種常用回歸技術,如何正確選擇回歸模型?
    本文解釋了回歸分析的內涵及其優勢,重點總結了應該掌握的線性回歸、邏輯回歸、多項式回歸、逐步回歸、嶺回歸、套索回歸、ElasticNet回歸等七種最常用的回歸技術及其關鍵要素,最後介紹了選擇正確的回歸模型的關鍵因素。什麼是回歸分析?回歸分析是一種預測性的建模技術,它研究的是因變量(目標)和自變量(預測器)之間的關係。
  • 線性回歸的正則化 ——嶺回歸與LASSO回歸
    這裡的模型複雜度並非是冪次上的數值大,而是模型空間中可選模型的數量多。所以上面問題中加入αI,此時滿秩可求逆。正則化的優化目標函數一般為:其中α≥0,對於線性回歸模型,當時的回歸稱為LASSO回歸,稱為L1正則化(或L1範數);當時的回歸稱為嶺回歸,稱為L2正則化(或
  • 機器學習:回歸分析——多元線性回歸分析
    數據集中的自變量有8個,即X1~X8,因變量為Y1(供熱負荷能效)與Y2(供冷負荷能效),實例將分析8個自變量和供熱負荷能效(Y1)之間的回歸模型。輸出結果分析如下:1. 從回歸模型輸出的結果可以發現,R-squared=0.916非常接近1,說明該模型對原始數據擬合得較好。並且F檢驗的P值Prob (F-statistic)遠小於0.05,說明該模型是顯著的,可以使用。
  • GBDT回歸的原理及Python實現
    每個同事年齡的殘差 = 年齡 - 預測值 = [5, 6, 7] - [6, 6, 6],所以殘差為[-1, 0, 1]1.4 預測年齡的殘差為了讓模型更加準確,其中一個思路是讓殘差變小。如何減少殘差呢?我們不妨對殘差建立一顆回歸樹,然後預測出準確的殘差。