統計演算法_概率基礎

来源:https://www.cnblogs.com/xiu123/archive/2018/08/12/9465450.html
-Advertisement-
Play Games

說概率前複習下歷史函數create_rand_list() #創建一個含有指定數量元素的listsum_fun() #累加len_fun() #統計個數multiply_fun() #累乘sum_mean_fun() #算數平均數sum_mean_rate() #算數平均數計算回報median_fu ...


本次有以下函數

1、簡單邊際概率

2、聯合概率

3、條件概率

4、隨機變數期望值

5、隨機變數方差

6、隨機變數協方差

7、聯合協方差

8、組合期望回報

9、投資組合風險

 

 

 

 

說概率前複習下歷史函數
create_rand_list() #創建一個含有指定數量元素的list
sum_fun() #累加
len_fun() #統計個數
multiply_fun() #累乘
sum_mean_fun() #算數平均數
sum_mean_rate() #算數平均數計算回報
median_fun() #中位數
modes_fun() #眾數
ext_minus_fun() #極差
geom_mean_fun() #幾何平均數
geom_mean_rate() #幾何平均回報

var_fun() #方差-樣本S^2
covar_fun() #協方差(標準差)-樣本S
trans_coef_fun() #變異繫數CV
pearson_fun() #相關係數-樣本r
---------------以上是舊的------------------------------------------------------------------------
---------------以下是新的------------------------------------------------------------------------
概率這塊整個給我看了個懵逼,後面的代碼都是按照我自己理解寫的,如果有錯誤,歡迎指正
另外說明的是概率是很精細的事情,所以浮點型的數字會比較多,而且小數位數十分精確,除特殊情況,我就四捨五入截取到小數點後4位
簡單事件,就是只有一個特征的事件,所有可能事件的集合就是樣本空間,舉個例子
有兩袋子花生米,第一個袋子有32個花生米,其中有3個壞的,第二個袋子有17個花生米,其中有5個壞的,這個例子的樣本空間就是下麵這樣。我想說,要是我選了B袋子我一定詛咒賣花生的老闆吃速食麵沒有調料
袋子|是否壞的|花生米個數
A   |0       |3
A   |1       |29
B   |0       |5
B   |1       |12
為了方便起見,是True用0表示,否false用1表示
1、簡單邊際概率,記做P(A)
這個容易理解,比如計算壞花生米的出現率,這個簡單,就不單獨寫代碼了
P(A) = 壞花生米/總數 = 8/49 = 0.1633

2、聯合概率

既然是聯合了,就需要兩個事件,記為P(A且B),∩這玩意就是且
就是A事件和B事件聯合成同一個事件的概率,從A袋子吃出一個壞花生米的概率就是聯合概率,事件A是壞花生米,事件B是A袋子
這個比較有分歧,比較廣泛使用的是
P(A∩B) = 3/49 = 0.0612
另一種就是
P(A∩B) = 3/32*0.5 = 0.0517
我個人比較同意第一種,但是受到其他事件的影響比較大,考慮如果B袋子有10000個花生,壞花生數不變,結果會有很大差異
那麼函數就有了

def unite_rate_fun(condition_count,all_count):
  p_a_with_b = float(condition_count) / all_count
  return p_a_with_b

3、條件概率
一個事件已發生的情況下,得到另一個事件的發生概率,比較文言的說法是,給定事件B,事件A的發生概率,當然也可以反過來
P(A|B) = P(A∩B)/P(B)
反過來
P(B|A) = P(A∩B)/P(A)
還是這個例子,現在已知B事件是從A袋子取,那麼P(B) = 32/49
P(A|B) = (3/49)/(32/49) = 3/32 = 0.0937
這個函數就是

def condition_rate_fun(p_a_with_b,p_b):
  p_a_from_b = p_a_with_b / p_b
  return p_a_from_b

 

下麵的內容用花生米的例子就不合適了,換個學校的事
一個班英語考試各分數的比例
分數|占比
20  |0.1
40  |0.1
60  |0.3
80  |0.4
100 |0.1

4、隨機變數期望值
和算數平均數差不多,實際結果不應與這個數有太多偏差
μ = E(X) = NΣXiP(Xi)
E(X) = 20 * 0.1 + 40 * 0.1 + 60 * 0.3 + 80 * 0.4 + 100 * 0.1 = 66

def e_x(count_list,rate_list):
  e_len = len_fun(count_list)
  if e_len == len_fun(rate_list):
    e_list = [count_list[i] * rate_list[i] for i in range(e_len)]
    e_num = sum_fun(e_list)
  else: return None
  return e_num

5、隨機變數方差
和樣本方差功能一樣,不多說了
σ^2 = NΣ[Xi-E(X)]^2P(Xi)

def var_rand_fun(count_list,rate_list):
  e_num = e_x(count_list,rate_list)
  var_len = len_fun(count_list)
  if var_len == len_fun(rate_list):
    var_list = [((count_list[i] - e_num) ** 2) * rate_list[i] for i in range(var_len)]
    var_num = sum_fun(var_list)
  else: return None
  return var_num

6、隨機變數協方差
函數簡單,套用協方差函數即可

def covar_rand_fun(count_list,rate_list):
  var_rand_num = var_rand_fun(count_list,rate_list)
  covar_num = var_rand_num ** 0.5
  return covar_num

7、聯合協方差
σxy = NΣ[Xi-E(X)][Yi-E(Y)]P(XiYi)

def covar_rand_xy_fun(x_count_list,y_count_list,xy_rate_list):
  e_x_num = e_x(x_count_list,xy_rate_list)
  e_y_num = e_x(y_count_list,xy_rate_list)
  covar_len = len_fun(x_count_list)
  if covar_len == len_fun(y_count_list) and covar_len == len_fun(xy_rate_list):
    covar_rand_xy_list = [(x_count_list[i] - e_x_num) * (y_count_list[i] - e_y_num) * xy_rate_list[i] for i in range(covar_len)]
    covar_rand_xy_num = sum_fun(covar_rand_xy_list)
  else: return None
  return covar_rand_xy_num

8、組合期望回報
用最小的風險能獲得的最大回報
E(P) = wE(X) + (1 - w)E(Y)
w是投資資產x的比例

def e_p(x_count_list,y_count_list,xy_rate_list):
  e_x_num = e_x(x_count_list,xy_rate_list)
  e_y_num = e_x(y_count_list,xy_rate_list)
  w = sum_fun(x_count_list) / (sum_fun(x_count_list) + sum_fun(y_count_list))
  e_p_num = w * e_x_num + (1 - w) * e_y_num
  return e_p_num

9、投資組合風險
這個沒有搞懂是做什麼的,應該是期望回報的偏差值吧
σ(p) = [w^2σ(x)^2 + (1 - w)^2σ(y)^2 + 2w(1 - w)σ(xy)]^0.5

def var_p_fun(x_count_list,y_count_list,xy_rate_list):
  w = sum_fun(x_count_list) / (sum_fun(x_count_list) + sum_fun(y_count_list))
  var_rand_x_num = var_rand_fun(x_count_list,xy_rate_list)
  var_rand_y_num = var_rand_fun(y_count_list,xy_rate_list)
  covar_rand_xy_num = covar_rand_xy_fun(x_count_list,y_count_list,xy_rate_list)
  var_p_num = (w * w * var_rand_y_num + (1 - w) * (1 - w) * var_rand_y_num + 2 * w * (1 - w) * covar_rand_xy_num) ** 0.5
  return var_p_num

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 已經記不清有多少讀者問過: 博主,你是怎麼學習的?像我這樣的情況有啥好的建議嘛? 也不知道啥時候我居然成人生導師了。當然我不排斥這些問題,和大家交流都是學習的過程。 ...
  • 前言 基礎面向對象 靜態,單例模式,繼承詳情知識點。 關鍵字, 變數,靜態代碼塊,代碼塊(不加靜態),對象創建過程,單例模式,繼承。 靜態 static關鍵字 在以上的代碼中,我們會遇到這種情況,創建了一個對象,但是調用功能時,沒有調用到對象中的數據,那麼為啥還要調用呢?創建對象不就是為了封裝數據的 ...
  • get是通過URL傳參,容易暴露,容易被sql註入,防止sql註入的方式之一是:加intval($_GET['id']); ...
  • 最終效果:瀏覽器地址欄輸入www.baidu.com訪問時,會顯示自己的網頁 1、創建文件 任意盤新建一個www.baidu.com文件,在該文件夾下新建WEB-INF文件、自己寫的一個html文件,一張圖片,然後在WEB-INF下新建一個classes文件、lib文件以及一個web.xml文件,在 ...
  • 給定兩個有序整數數組 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為一個有序數組。 說明: 初始化 nums1 和 nums2 的元素數量分別為 m 和 n。 你可以假設 nums1 有足夠的空間(空間大小大於或等於 m + n)來保存 nums2 中的元素 ...
  • 又有時間寫東西了,最近深感世事並不以人的美好願望而改變,還是要以積極地心態來適應新變化,多多關心身邊的人。 圖釘畫中一個圖釘代表一個像素,所以關鍵在於像素渣化,降低解析度,圖釘的色彩有限,還需要降低圖片的色彩數量,統計各種色彩的數量及位置。 以上都可以用Pillow完成,Pillow是Python中 ...
  • 網路上兩台主機的交互 ①根據IP找到對方主機 ②數據發送到對方指定的應用程式上,為了表示這些應用程式,引入了埠的概念。 常用埠: wed埠80 MySQL埠3306 有效埠 0~65535 ③定義通信規則,稱為協議。國際組織定義了通用協議TCP/IP協議 本地迴環地址:127.0.0.1( ...
  • 恢復內容開始 python爬蟲學習從0開始 第一次學習了python語法,迫不及待的來開始python的項目。首先接觸了爬蟲,是一個簡單爬蟲。個人感覺python非常簡潔,相比起java或其他面向對象的編程語言,動態語言不需要聲明函數或變數類型。python有20年的發展歷史,以簡潔高效聞名,pyt ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...