python模擬簡單線性回歸

2021-01-10 為辛

通過輸入已有的數值對(x,y),建立模型,再次輸入x的值時可以預測y的值

代碼如下:

from math import sqrtfrom random import seedfrom random import randrangefrom csv import readerfrom math import sqrtfrom matplotlib import pyplot as pltimport numpy as np #計算平均值def mean(values): return sum(values) / float(len(values)) # 計算方差def variance(values, mean): return sum([(x - mean) ** 2 for x in values]) #計算協方差def convariance(x, mean_x, y, mean_y): convar = 0.0 for i in range(len(x)): convar += (x[i] - mean_x) * (y[i] - mean_y) return convar #計算回歸係數函數def coefficients(dataset): x = [row[0] for row in dataset] y = [row[1] for row in dataset] x_mean, y_mean = mean(x), mean(y) w1 = convariance(x, x_mean, y, y_mean) / variance(x, x_mean) w0 = y_mean - w1 * x_mean return w0, w1 #構建簡單的線性回歸def simple_linear_regression(train, test): predict = list() #構建空列表 w0, w1 = coefficients(train) #從訓練集合中獲取回歸係數 global w_k w_k = w1 global w_b w_b = w0 for row in test: #從測試集中讀取每一個不同的x y_model = w1 * row[0] + w0 #用模型預測y predict.append(y_model) #記錄每一個預測值y return predict #計算均方根誤差RMSEdef rmse_metric(actual, predicted): sum_error = 0.0 for i in range(len(actual)): prediction_error = predicted[i] - actual[i] sum_error += (prediction_error ** 2) mean_error = sum_error / float(len(actual)) return sqrt(mean_error) #評估算法數據準備及協調def evaluate_algorithm(dataset, algorithm): test_set = list() for row in dataset: row_copy = list(row) row_copy[-1] = None test_set.append(row_copy) predicted = algorithm(dataset, test_set) for val in predicted: print('%.3f\t' % val) actual = [row[-1] for row in dataset] rmse = rmse_metric(actual, predicted) return rmse #導入CSV文件def load_csv(filename): dataset = list() try: with open(filename, 'r') as file: csv_reader = reader(file) #讀取表頭X,Y heading = next(csv_reader) #將文件指針下移至第一條真正的數據 for row in csv_reader: if not row : #判定是否有空行,如果有,則跳入下一行,繼續讀取數據 continue dataset.append(row) except IOError as err: print("file error :",str(err)) return dataset #將字符串列轉換為浮點數def str_column_to_float(dataset, column): for row in dataset: row[column] = float(row[column].strip()) #將數據集分割為訓練集合和測試兩部分def train_test_split(dataset, percent): train = list() train_size = percent * len(dataset) dataset_copy = list(dataset) while len(train) < train_size: index = randrange(len(dataset_copy)) train.append(dataset_copy.pop(index)) return train, dataset_copy #使用分隔開的訓練集合和測試集合運行評估算法def evaluate_algorithm(dataset, algorithm, split_percent, *args): train, test = train_test_split(dataset, split_percent) test_set = list() for row in test : row_copy = list(row) row_copy[-1] = None test_set.append(row_copy) predicted = algorithm(train, test_set, *args) actual = [row[-1] for row in test] rmse = rmse_metric(actual, predicted) return rmse def visualization(dateset): fig = plt.figure() # 畫圖區域分成1行1列。選擇第一塊區域。 ax1 = fig.add_subplot(1, 1, 1) x = [row[0] for row in dataset] y = [row[1] for row in dataset] ax1.plot(x, y,'bs') x_1 = np.linspace(min(x),max(x)) y_1 = x_1 * w_k + w_b ax1.plot(x_1,y_1) plt.grid() plt.show() #設置隨機數種子,為隨機數訓練和測試數據集做準備seed(2) #導入保險數據並做數據分割準備filename = 'insurance.csv'dataset = load_csv(filename)print(dataset)for col in range(len(dataset[0])): str_column_to_float(dataset, col) #設置數據集合分割百分比percent = 0.6 rmse = evaluate_algorithm(dataset, simple_linear_regression, percent)print('RMSE : %.3f' % rmse)visualization(dataset)# dataset = [[1.2, 1.1], [2.4, 3.5], [4.1, 3.2], [3.4, 2.8], [5, 5.4]]# x = [row[0] for row in dataset]# y = [row[1] for row in dataset]# mean_x, mean_y = mean(x), mean(y) #獲取均值# var_x, var_y = variance(x, mean_x), variance(y, mean_y)# convar = convariance(x, mean_x, y, mean_y) #獲取協方差## print('x的統計特性:均值 = % .3f 方差 = %.3f' % (mean_x, var_x))# print('y的統計特性:均值 = % .3f 方差 = %.3f' % (mean_y, var_y))# print('協方差 = :%.3f' % convar)## w0, w1 = coefficients(dataset)# print('回歸係數分別為: w0 = %.3f, w1 = %.3f' % (w0, w1))## rmse = evaluate_algorithm(dataset, simple_linear_regression)# print('RMSE : %.3f' % rmse)代碼中的insurance.csv文件需要與代碼文件在同一個目錄下

文件內容如下:

運行結果:

相關焦點

  • 一元線性回歸分析python - CSDN
    python多重線性回歸分析多重線性回歸分析定義多重線性回歸模型:MulitipleLinear Regression多元線性回歸模型:Multivariate Linear Regression數據準備#多重線性回歸#數據準備import pandas as pddf=pd.read_csv('e:/python/out/corr.csv',encoding='utf8')
  • python一元線性回歸分析專題及常見問題 - CSDN
    python多重線性回歸分析多重線性回歸分析定義多重線性回歸模型:MulitipleLinear Regression多元線性回歸模型:Multivariate Linear Regression數據準備#多重線性回歸#數據準備import pandas as pddf=pd.read_csv('e:/python/out/corr.csv',encoding='utf8')
  • Python環境下的8種簡單線性回歸算法
    因此,很多自然現象可以通過這些變換和線性模型來近似模擬,即使當輸出與特徵的函數關係是高度非線性的也沒問題。另一方面,由於 Python 正在快速發展為數據科學家的首選程式語言,所以能夠意識到存在很多方法用線性模型擬合大型數據集,就顯得尤為重要。同樣重要的一點是,數據科學家需要從模型得到的結果中來評估與每個特徵相關的重要性。
  • 線性回歸:簡單線性回歸詳解
    【導讀】本文是一篇專門介紹線性回歸的技術文章,討論了機器學習中線性回歸的技術細節。線性回歸核心思想是獲得最能夠擬合數據的直線。
  • 使用Python中的線性回歸通過語音診斷帕金森氏病
    本文,我們將創建一個簡單的python機器學習算法,以便能夠通過聲音來診斷該人是否為患者。我們將使用一組(健康者和帕金森病患者)音頻文件庫,通過對音頻進行一些測量來構建我們的機器學習數據集。建立機器學習數據集後,我們將使用SciKit Learn庫訓練線性回歸模型。最後,我們將構建一個python庫,這個庫可以輕鬆集成到其他應用程式中。數據集首先,我們需要將音頻文件轉換成包含音頻測量值以及患者是否健康標誌的表格。
  • 8種用Python實現線性回歸的方法,究竟哪個方法最高效?
    「寶刀不老」的線性回歸時至今日,深度學習早已成為數據科學的新寵。即便往前推10年,SVM、boosting等算法也能在準確率上完爆線性回歸。為什麼我們還需要線性回歸呢?一方面,線性回歸所能夠模擬的關係其實遠不止線性關係。
  • 8種用Python實現線性回歸的方法
    為什麼我們還需要線性回歸呢?一方面,線性回歸所能夠模擬的關係其實遠不止線性關係。線性回歸中的「線性」指的是係數的線性,而通過對特徵的非線性變換,以及廣義線性模型的推廣,輸出和特徵之間的函數關係可以是高度非線性的。
  • Python數據科學:線性回歸
    本次介紹:線性回歸:多個連續變量與一個連續變量間的關係。其中線性回歸分為簡單線性回歸和多元線性回歸。/ 01 / 數據分析與數據挖掘資料庫:一個存儲數據的工具。/ 02 / 回歸方程01 簡單線性回歸簡單線性回歸只有一個自變量與一個因變量。含有的參數有「回歸係數」「截距」「擾動項」。其中「擾動項」又稱「隨機誤差」,服從均值為0的正態分布。線性回歸的因變量實際值與預測值之差稱為「殘差」。
  • python多重線性回歸分析
    一個簡單的線性回歸模型測試。定義:線性回歸是利用數理統計中回歸分析,來確定兩種或兩種以上變量間相互依賴的定量關係的一種統計分析方法,運用十分廣泛。表達形式為y =aX+b,b為誤差服從均值為0的正態分布,a為截距。
  • 簡單線性回歸模型
    2 基礎回顧回歸的概念來源於實際問題,那麼現在我們所說的線性回歸分析問題具體指的是什麼呢?3 求解線性回歸模型函數3.1 極大似然法最小二乘法和極大似然法都可以用來求解線性回歸模型,我們在往期文章中討論過最小二乘法,這裡對似然法進行簡單介紹。
  • 了解線性回歸的數學原理:線性回歸背後的微積分
    線性回歸通常是任何機器學習課程的起點。目的是預測輸入變量與目標變量之間的線性關係。天真的情況是穿過空間原點的直線。在這裡,我們僅限於二維空間,即笛卡爾平面。讓我們從y = mx格式開始逐步發展,然後從y = mx + c回歸開始。y = mx的簡化方案在這種情況下,我們知道我們要對通過原點的數據擬合一條線。
  • 簡單線性回歸(一)
    回歸分析(regression analysis )是研究一個變量如何隨另一些變量變化的方法。例如,學習成績會受努力的時間,方法,個人的智慧,教育資源等因素影響;疾病的發生與生活環境,方式,遺傳因素,自身體質等影響。常見的回歸分析有 線性回歸、非線性回歸、多重線性回歸、Logistic回歸等等。
  • 簡單線性回歸(二)
    線性回歸相關知識:簡單線性回歸(一)線性回歸步驟線性回歸需滿足的條件①因變量Y與自變量X呈線性關係②每個個體觀察值之間互相獨立③在一定範圍內,任意給定X值,其對應的隨機變量Y均服從正態分布④在一定範圍內,不同X值所對應的隨機變量Y的方差相等某研究者測量了16名成年男子的體重(Kg)和臀圍(cm)數據,欲探求成年男子的體重與臀圍是否可以建立線性回歸模型。
  • Python數據分析|線性回歸
    Python數據分析學習筆記,今天分享下利用Python對業務進行數據預處理,並利用線性回歸進行數據預測。壹 數據導入Python下載及環境配置這裡就不贅述了哈,網上教程非常多,我們直接一開始就進入乾貨,打它一個開門見山。
  • 8 種進行簡單線性回歸的方法分析與討論
    8 種進行簡單線性回歸的方法分析與討論 Tirthajyoti Sarkar 發表於 2018-01-05 08:18:57 本文中,作者討論了 8 種在 Python 環境下進行簡單線性回歸計算的算法,不過沒有討論其性能的好壞
  • 簡單線性回歸分析
    我們還是採用之前的數據,介紹SPSS進行線性回歸分析的具體步驟。為0.995,調整R2為0.995,進行線性回歸過程中R2的值在0-1之間,R2越大,表明納入方程的自變量對因變量的解釋程度越高,建立的數學模型也就越魯棒(Robust)。
  • SPSS|簡單線性回歸(一)
    即,本研究中簡單線性回歸的觀測值具有相互獨立性,滿足假設4。但不得不說,Durbin-Watson檢驗不是萬能的。它僅適用於對鄰近觀測值相關性的檢驗(1st-order autocorrelation)。舉例來說,我們一般按照調查順序錄入數據,將第一位受試者錄入到第一行,再將第二位受試者錄入到第二行。
  • 原理+代碼|Python實戰多元線性回歸模型
    原理其實非常簡單,將無法直接用於建模的名義變量轉換成可放入模型的虛擬變量的核心就短短八個字:「四散拆開,非此即彼」。下面用一個只有 4 行的微型數據集輔以說明。多重線性回歸模型的主要假設之一是我們的預測變量(自變量)彼此不相關。我們希望預測變量(自變量)與反應變量(因變量)相關,而不是彼此之間具有相關性。
  • 7種執行簡單的線性回歸的分析與討論!
    由於scikit-learn是一種免費的機器學習庫,它具有回歸、分類、聚類、模型選擇和降維等功能,所以常用的方法是從該庫調用線性模型類並擬合數據。雖然這可以為應用機器學習的其他流水線特性(例如數據規範化,模型係數正則化,將線性模型提供給另一個下遊模型)提供額外的優勢,但這通常不是確定回歸係數(和一些基本的相關統計)最快或最乾淨、簡單的方法。
  • 一文教你全面掌握用Python實現線性回歸
    全文共4968字,預計學習時長15分鐘或更長本文旨在為讀者理解和應用線性回歸時提供參考。雖然線性回歸算法很簡單,但是只有少數人能真正理解其基本原則。本文首先會深入挖掘線性回歸理論,理解其內在的工作機制,然後利用Python實現該算法,為商業問題建模。理論線性回歸或許是學習統計學最簡單的方法。在學習更高級的方法之前,這是一個很好的入門方法。