日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线性回归csv数据集_数据科学的基石:统计学、机器学习、计算机科学(三)——线性回归...

發布時間:2025/3/13 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线性回归csv数据集_数据科学的基石:统计学、机器学习、计算机科学(三)——线性回归... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數據科學家們常說,所有的模型都是錯的,但是,其中一些是有用的。如果一個“有用”的模型能夠過濾掉數據中哪些不重要的細枝末節,抓住其主要的內在關系,從而幫助我們更好地理解數據。很多情況下,線性回歸就是這樣一個“有用”模型,本篇我們從機器學習以及統計學兩個角度去探索《線性回歸》。以下內容來自于筆者閱讀各類數據科學相關書籍的讀書摘錄筆記,希望能夠對數據分析行業從業者起到點滴幫助,由于筆者水平能力有限,整理的不妥之處請各位大佬批評指正!如涉版權問題請及時聯系刪除,謝謝!歡迎轉發分享學習!——2019年12月15日

目錄

  • 數據科學概述
  • 數學基礎:線代、概率論、微積分
  • 線性回歸
  • 邏輯回歸
  • 算法的求解
  • 計量經濟學的啟示
  • 監督學習
  • 無監督學習
  • 生成式模型
  • 分布式機器學習
  • 神經網絡與深度學習
  • Python利器:Pandas、StatsModel、Sklearn、Tensorflow、XGBoost、Pyspark
  • 特征工程:滑動窗口、時域特征、頻域特征

線性回歸概述

從初中學過的二元一次方程看起,因變量與自變量的關系可以用一條直線表示(這就是“線性”的含義)

我們所謂的建模過程,其實就是找到一個模型,最大程度的擬合我們的數據。 在簡單線回歸問題中,模型就是我們的直線方程:y = ax + b 。

數學函數理論的世界是精確的:代入一個自變量就能得到唯一的因變量。但現實世界中的數據就像這個散點圖,我們只能盡可能地在雜亂中尋找規律。用數學的模型去擬合現實的數據,這就是統計。統計不像數學那么精確,統計的世界不是非黑即白的,它有“灰色地帶”,但是統計會將理論與實際間的差別表示出來,也就是“誤差”。因此,統計世界中的公式會有一個小尾巴 ,用來代表誤差,即:

損失函數

要想最大的擬合數據,本質上就是找到沒有擬合的部分,也就是損失的部分盡量小,就是損失函數(loss function)(也有算法是衡量擬合的程度,稱函數為效用函數(utility function)):

因此,推導思路為:

通過分析問題,確定問題的損失函數或者效用函數;然后通過最優化損失函數或者效用函數,獲得機器學習的模型

近乎所有參數學習算法都是這樣的套路,區別是模型不同,建立的目標函數不同,優化的方式也不同。

回到簡單線性回歸問題,目標:已知訓練數據樣本

,找到

的值,使

盡可能小

這是一個典型的最小二乘法問題(最小化誤差的平方)

通過最小二乘法可以求出a、b的表達式:

在機器學習中,所有的算法模型其實都依賴于最小化或最大化某一個函數,我們稱之為“目標函數”。

最小化的這組函數被稱為“損失函數”。什么是損失函數呢?

損失函數描述了單個樣本預測值和真實值之間誤差的程度。用來度量模型一次預測的好壞。

損失函數是衡量預測模型預測期望結果表現的指標。損失函數越小,模型的魯棒性越好。。

常用損失函數有:

0-1損失函數:用來表述分類問題,當預測分類錯誤時,損失函數值為1,正確為0

平方損失函數:用來描述回歸問題,用來表示連續性變量,為預測值與真實值差值的平方。(誤差值越大、懲罰力度越強,也就是對差值敏感)

絕對損失函數:用在回歸模型,用距離的絕對值來衡量

對數損失函數:是預測值Y和條件概率之間的衡量。事實上,該損失函數用到了極大似然估計的思想。P(Y|X)通俗的解釋就是:在當前模型的基礎上,對于樣本X,其預測值為Y,也就是預測正確的概率。由于概率之間的同時滿足需要使用乘法,為了將其轉化為加法,我們將其取對數。最后由于是損失函數,所以預測正確的概率越高,其損失值應該是越小,因此再加個負號取個反。

以上損失函數是針對于單個樣本的,但是一個訓練數據集中存在N個樣本,N個樣本給出N個損失,如何進行選擇呢?

這就引出了風險函數。

期望風險

期望風險是損失函數的期望,用來表達理論上模型f(X)關于聯合分布P(X,Y)的平均意義下的損失。又叫期望損失/風險函數。

經驗風險

模型f(X)關于訓練數據集的平均損失,稱為經驗風險或經驗損失。

其公式含義為:模型關于訓練集的平均損失(每個樣本的損失加起來,然后平均一下)

經驗風險最小的模型為最優模型。在訓練集上最小經驗風險最小,也就意味著預測值和真實值盡可能接近,模型的效果越好。公式含義為取訓練樣本集中對數損失函數平均值的最小。

經驗風險最小化和結構風險最小化

期望風險是模型關于聯合分布的期望損失,經驗風險是模型關于訓練樣本數據集的平均損失。根據大數定律,當樣本容量N趨于無窮時,經驗風險趨于期望風險。

因此很自然地想到用經驗風險去估計期望風險。但是由于訓練樣本個數有限,可能會出現過度擬合的問題,即決策函數對于訓練集幾乎全部擬合,但是對于測試集擬合效果過差。因此需要對其進行矯正:

結構風險最小化:當樣本容量不大的時候,經驗風險最小化容易產生“過擬合”的問題,為了“減緩”過擬合問題,提出了結構風險最小理論。結構風險最小化為經驗風險與復雜度同時較小。

通過公式可以看出,結構風險:在經驗風險上加上一個正則化項(regularizer),或者叫做罰項(penalty) 。正則化項是J(f)是函數的復雜度再乘一個權重系數(用以權衡經驗風險和復雜度)

損失函數:單個樣本預測值和真實值之間誤差的程度。

期望風險:是損失函數的期望,理論上模型f(X)關于聯合分布P(X,Y)的平均意義下的損失。

經驗風險:模型關于訓練集的平均損失(每個樣本的損失加起來,然后平均一下)。

結構風險:在經驗風險上加上一個正則化項,防止過擬合的策略。

從機器學習的角度看

整體上的步驟可以概括為:

  • 確定問題場景類型
  • 提取特征
  • 根據模型形式估計參數
  • 評估模型效果
  • 代碼實踐

    # -*- coding: UTF-8 -*- """ 此腳本用于展示使用sklearn搭建線性回歸模型 """import os import sysimport numpy as np import matplotlib.pyplot as plt import pandas as pd from sklearn import linear_modeldef evaluateModel(model, testData, features, labels):"""計算線性模型的均方差和決定系數參數----model : LinearRegression, 訓練完成的線性模型testData : DataFrame,測試數據features : list[str],特征名列表labels : list[str],標簽名列表返回----error : np.float64,均方差score : np.float64,決定系數"""# 均方差(The mean squared error),均方差越小越好error = np.mean((model.predict(testData[features]) - testData[labels]) ** 2)# 決定系數(Coefficient of determination),決定系數越接近1越好score = model.score(testData[features], testData[labels])return error, scoredef visualizeModel(model, data, features, labels, error, score):"""模型可視化"""# 為在Matplotlib中顯示中文,設置特殊字體plt.rcParams['font.sans-serif']=['SimHei']# 創建一個圖形框fig = plt.figure(figsize=(6, 6), dpi=80)# 在圖形框里只畫一幅圖ax = fig.add_subplot(111)# 在Matplotlib中顯示中文,需要使用unicode# 在Python3中,str不需要decodeif sys.version_info[0] == 3:ax.set_title(u'%s' % "線性回歸示例")else:ax.set_title(u'%s' % "線性回歸示例".decode("utf-8"))ax.set_xlabel('$x$')ax.set_ylabel('$y$')# 畫點圖,用藍色圓點表示原始數據# 在Python3中,str不需要decodeif sys.version_info[0] == 3:ax.scatter(data[features], data[labels], color='b',label=u'%s: $y = x + epsilon$' % "真實值")else:ax.scatter(data[features], data[labels], color='b',label=u'%s: $y = x + epsilon$' % "真實值".decode("utf-8"))# 根據截距的正負,打印不同的標簽if model.intercept_ > 0:# 畫線圖,用紅色線條表示模型結果# 在Python3中,str不需要decodeif sys.version_info[0] == 3:ax.plot(data[features], model.predict(data[features]), color='r',label=u'%s: $y = %.3fx$ + %.3f'% ("預測值", model.coef_, model.intercept_))else:ax.plot(data[features], model.predict(data[features]), color='r',label=u'%s: $y = %.3fx$ + %.3f'% ("預測值".decode("utf-8"), model.coef_, model.intercept_))else:# 在Python3中,str不需要decodeif sys.version_info[0] == 3:ax.plot(data[features], model.predict(data[features]), color='r',label=u'%s: $y = %.3fx$ - %.3f'% ("預測值", model.coef_, abs(model.intercept_)))else:ax.plot(data[features], model.predict(data[features]), color='r',label=u'%s: $y = %.3fx$ - %.3f'% ("預測值".decode("utf-8"), model.coef_, abs(model.intercept_)))legend = plt.legend(shadow=True)legend.get_frame().set_facecolor('#6F93AE')# 顯示均方差和決定系數# 在Python3中,str不需要decodeif sys.version_info[0] == 3:ax.text(0.99, 0.01, u'%s%.3fn%s%.3f'% ("均方差:", error, "決定系數:", score),style='italic', verticalalignment='bottom', horizontalalignment='right',transform=ax.transAxes, color='m', fontsize=13)else:ax.text(0.99, 0.01, u'%s%.3fn%s%.3f'% ("均方差:".decode("utf-8"), error, "決定系數:".decode("utf-8"), score),style='italic', verticalalignment='bottom', horizontalalignment='right',transform=ax.transAxes, color='m', fontsize=13)# 展示上面所畫的圖片。圖片將阻斷程序的運行,直至所有的圖片被關閉# 在Python shell里面,可以設置參數"block=False",使阻斷失效。plt.show()def trainModel(trainData, features, labels):"""利用訓練數據,估計模型參數參數----trainData : DataFrame,訓練數據集,包含特征和標簽features : 特征名列表labels : 標簽名列表返回----model : LinearRegression, 訓練好的線性模型"""# 創建一個線性回歸模型model = linear_model.LinearRegression()# 訓練模型,估計模型參數model.fit(trainData[features], trainData[labels])return modeldef linearModel(data):"""線性回歸模型建模步驟展示參數----data : DataFrame,建模數據"""features = ["x"]labels = ["y"]# 劃分訓練集和測試集trainData = data[:15]testData = data[15:]# 產生并訓練模型model = trainModel(trainData, features, labels)# 評價模型效果error, score = evaluateModel(model, testData, features, labels)# 圖形化模型結果visualizeModel(model, data, features, labels, error, score)def readData(path):"""使用pandas讀取數據"""data = pd.read_csv(path)return dataif __name__ == "__main__":homePath = os.path.dirname(os.path.abspath(__file__))# Windows下的存儲路徑與Linux并不相同if os.name == "nt":dataPath = "%sdatasimple_example.csv" % homePathelse:dataPath = "%s/data/simple_example.csv" % homePathdata = readData(dataPath)linea

    從統計學的角度看

    整體上的步驟可以概括為:

  • 假設條件概率
  • 估計參數
  • 推導參數的分布
  • 假設檢驗與置信區間
  • """ 此腳本用于如何使用統計方法解決模型幻覺 """# 保證腳本與Python3兼容 from __future__ import print_functionimport osimport numpy as np import statsmodels.api as sm import matplotlib.pyplot as plt import pandas as pddef generateRandomVar():""""""np.random.seed(4873)return np.random.randint(2, size=20) def evaluateModel(res):"""分析線性回歸模型的統計性質"""# 整體統計分析結果print(res.summary())# 用f test檢測x對應的系數a是否顯著print("檢驗假設z的系數等于0:")print(res.f_test("z=0"))# 用f test檢測常量b是否顯著print("檢測假設const的系數等于0:")print(res.f_test("const=0"))# 用f test檢測a=1, b=0同時成立的顯著性print("檢測假設z和const的系數同時等于0:")print(res.f_test(["z=0", "const=0"]))def trainModel(X, Y):"""訓練模型"""model = sm.OLS(Y, X)res = model.fit()return resdef confidenceInterval(data):""""""features = ["x"]labels = ["y"]Y = data[labels]_X = data[features]# 加入新的隨機變量,次變量的系數應為0_X["z"] = generateRandomVar()# 加入常量變量X = sm.add_constant(_X)res = trainModel(X, Y)evaluateModel(res)def generateData():"""生成模型數據"""np.random.seed(5320)x = np.array(range(0, 20)) / 2error = np.round(np.random.randn(20), 2)y = 0.05 * x + error# 新加入的無關變量z恒等于1z = np.zeros(20) + 1return pd.DataFrame({"x": x, "z": z, "y": y})def wrongCoef():"""由于新變量的加入,正效應變為負效應"""features = ["x", "z"]labels = ["y"]data = generateData()X = data[features]Y = data[labels]# 沒有多余變量時,x系數符號估計正確,為正model = sm.OLS(Y, X["x"])res = model.fit()print("沒有加入新變量時:")print(res.summary())# 加入多余變量時,x系數符號估計錯誤,為負model1 = sm.OLS(Y, X)res1 = model1.fit()print("加入新變量后:")print(res1.summary())def readData(path):"""使用pandas讀取數據"""data = pd.read_csv(path)return dataif __name__ == "__main__":homePath = os.path.dirname(os.path.abspath(__file__))# Windows下的存儲路徑與Linux并不相同if os.name == "nt":dataPath = "%sdatasimple_example.csv" % homePathelse:dataPath = "%s/data/simple_example.csv" % homePathdata = readData(dataPath)print("***************************************************")# 在Windows下運行此腳本需確保Windows下的命令提示符(cmd)能顯示中文print("加入不相關的新變量,新變量的系數被錯誤估計為不等于0")print("***************************************************")confidenceInterval(data)print("**********************************************")print("加入不相關的新變量,舊變量系數的符號被錯誤估計")print("**********************************************

    關注公眾號“格數致知”(ID:Data_SCI)回復“數據科學3”獲取本文的pdf版本

    總結

    以上是生活随笔為你收集整理的线性回归csv数据集_数据科学的基石:统计学、机器学习、计算机科学(三)——线性回归...的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 麻豆视频网站在线观看 | 老师上课夹震蛋高潮了 | 亚洲午夜精品一区 | 美女扒开腿让人桶爽 | 色偷偷一区二区三区 | 亚洲日本成人在线观看 | 亚洲男人天堂网址 | 91国产精品| 大黄一级片 | 超碰在线99| 成人精品一区二区三区电影 | 扶她futa粗大做到怀孕 | 久久av在线 | 国产精品高潮呻吟久久 | 亚洲精品久 | 中文字幕乱码亚洲无线三区 | 免费国产a | 久久精品97 | 成人a√| 亚洲精品系列 | 69国产视频 | 亚洲欧洲一区二区在线观看 | 日韩在线免费视频 | 91啪国产在线 | 青青草逼| 成人听书哪个软件好 | 午夜一级视频 | 草草视频网站 | 成人片黄网站色大片免费毛片 | 美女黄色一级视频 | 日本一区二区高清不卡 | 男人插女人视频网站 | 中文在线字幕免费观看 | 欧美特黄 | 山村大伦淫第1部分阅读小说 | 亚洲天堂三区 | 免费观看已满十八岁 | 亚洲va天堂va欧美ⅴa在线 | 久久免费小视频 | 91精品免费观看 | 久久久久中文 | 精品日韩一区二区 | 亚洲一本之道 | 蜜桃视频一区二区三区在线观看 | 自拍偷拍一区二区三区 | 香蕉成视频人app下载安装 | 在线国产播放 | 91丝袜 | 日韩欧美一区二区三区四区五区 | 非洲一级黄色片 | av丁香| 国产成人一区二区三区视频 | 国语对白91 | av电影中文字幕 | 亚洲在线视频一区 | 在线观看高清av | 欧美资源站 | 白又丰满大屁股bbbbb | 在线观看www. | 久久精品欧美日韩 | 亚洲精品视屏 | 亚洲第三十七页 | 国产亚洲精品成人无码精品网站 | 五月天综合婷婷 | 成人av一区二区在线观看 | 午夜窝窝 | 天天插天天狠天天透 | 欧美高清在线观看 | 又黄又高潮的视频 | 国产美女无遮挡免费视频 | 超碰在线播放97 | 欧美日韩三级 | 欧美一级夜夜爽 | 特级淫片裸体免费看冫 | 国内三级在线 | 中文字幕精品在线视频 | 精品免费视频 | 美女干b视频 | 亚洲一区二区三区免费观看 | 国产一区二区免费电影 | 伊伊成人 | 久久久久免费 | 神马伦理影视 | 伊人国产在线 | 国产激情无套内精对白视频 | 在线日韩av | 欧美嫩草 | 欧美成人午夜影院 | 法国伦理少妇愉情 | xxx.国产| 丰满少妇影院 | 久久伊人99 | av手机免费看 | 亚洲1页 | 欧美日韩一区二区三区国产精品成人 | 日本成人在线免费观看 | 精品亚洲一区二区三区四区五区 | 中文字幕在线网址 | 国内精品偷拍 |