1. 程式人生 > >面向過程給出《貝葉斯思維:統計建模的Python學習法》——二維綵球問題學習程式碼

面向過程給出《貝葉斯思維:統計建模的Python學習法》——二維綵球問題學習程式碼

背景

給出讀《艾伯特貝葉斯思維:統計建模的Python學習法.pdf》的時候,寫的程式碼,以面向過程的方式給出。
本章彩彈問題,求似然度的時候,假設已知隱藏點時,射手等概率從各個角度射擊。

程式碼

匯入常見模組

# %load "E:\桌面space\臨時資料\python\個人自定義模組\ImportFile.py"
# Standard Scientific Import
import numpy as np
import scipy as sp
import pandas as pd
import matplotlib as mpl
from matplotlib import pyplot as
plt from matplotlib.pyplot import plot as plot import sklearn import seaborn as sns import sys import patsy # 個人程式碼測試路徑 sys.path.append(r"C:\Users\Administrator\PycharmProjects\QY_TS_Quant") from QY_plot import * plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文字型設定-黑體 plt.rcParams['axes.unicode_minus'
] = False # 解決儲存影象是負號'-'顯示為方塊的問題 sns.set(font='SimHei',font_scale=1.25,style="ticks",rc={"xtick.major.size": 3, "ytick.major.size": 3})# 解決Seaborn中文顯示問題
# Jupyter 預設設定
%matplotlib inline
%config InlineBackend.figure_format="retina"
%config InlineBackend.rc = {"figure.figsize": (7.5,4.5)}
# 多列輸出
from
IPython.core.interactiveshell import InteractiveShell InteractiveShell.ast_node_interactivity = "all"

中間函式

from functools import reduce
import operator
# 假設在alpha,beta的射手,隨機等概率可以往各個方向設計
def StrafingSpeed(alpha, beta, x):
    return (np.square(beta)+np.square(alpha-x))/beta
def normlize(x):
    return x/np.sum(x)
def MakePmf(alpha, beta, w=30):
    pmf = list(map(lambda v:1./ StrafingSpeed(alpha, beta, v), np.arange(w+1)))
    return normlize(pmf)
def likehood(AX, AY, x, w=30):
    AZS = reduce(operator.add, map(lambda v:1./StrafingSpeed(AX, AY, v),np.arange(w+1)))
    AZ =  1./StrafingSpeed(AX, AY, x)
    return  AZ/AZS
# 圍場寬30, 長50
w = 30
h = 50
# 寬邊 中彈位置
x = [15, 16, 18, 21]

假定射擊點時,牆上各點被擊打概率

alpha = 10
beta = 10
plt.plot(MakePmf(alpha, beta))

在這裡插入圖片描述

二維射擊點分佈

def update(AP,x):
    if not np.isscalar(x):
        for xi in x:
            AP = update(AP, xi)
    else:
        AZ = likehood(AX, AY, x)
        AP = AP*AZ
        AP /= AP.sum()
    return AP
X = np.arange(w+1)
Y = np.arange(1, h+1)
AX, AY = np.meshgrid(X, Y)
AP = np.ones_like(AX)
AP = update(AP, x)
plt.contour(AX,AY,AP,80)
plt.colorbar()

在這裡插入圖片描述

邊緣分佈

fig, axes = plt.subplots(1, 2, figsize=(18, 6))
axes[0].plot(AX[0], AP.sum(axis=0), label="alpha")
axes[1].plot(AY[:,0], AP.sum(axis=1), label="beta")
axes[0].legend();
axes[1].legend();
plt.suptitle("概率密度");

在這裡插入圖片描述

fig, axes = plt.subplots(1, 2, figsize=(18, 6))
axes[0].plot(AX[0], AP.sum(axis=0).cumsum(), label="alpha")
axes[1].plot(AY[:,0],AP.sum(axis=1).cumsum(), label="beta")
axes[0].legend();
axes[1].legend();
plt.suptitle("分佈函式");

在這裡插入圖片描述

def confintv(cdf, p):
    t = []
    flag = 0
    for i,v in enumerate(cdf):
        if flag==0:
            if v>=0.5-p/2:
                t.append(i)
                flag=1
        elif flag==1:
            if v>=0.5+p/2:
                t.append(i)
                break
    return t
# alpha的 50%置信區間
AX[0][confintv(AP.sum(axis=0).cumsum(), 0.5)]
array([14, 21])
# beta的50%置信區間
AY[:,1][confintv(AP.sum(axis=1).cumsum(), 0.5)]
array([ 5, 31])

置信區間

Acolor = np.zeros_like(AP)
s = np.argsort(AP.ravel())
for v in np.searchsorted(AP.flat[s].cumsum(),[0.25, 0.5, 0.75]):
    Acolor.flat[s[:v]] += 0.25
plt.imshow(Acolor, origin=True, aspect=0.5)

在這裡插入圖片描述

clf = plt.contour(AX, AY, Acolor,3);
plt.clabel(clf, fontsize=10);
plt.contourf(AX, AY, Acolor, 3);

在這裡插入圖片描述

相關推薦

面向過程思維統計建模Python學習》——綵球問題學習程式碼

背景 給出讀《艾伯特貝葉斯思維:統計建模的Python學習法.pdf》的時候,寫的程式碼,以面向過程的方式給出。 本章彩彈問題,求似然度的時候,假設已知隱藏點時,射手等概率從各個角度射擊。 程式碼 匯入

思維統計建模Python學習》高清中文版PDF+高清英文版PDF+原始碼

下載:https://pan.baidu.com/s/1axiPTi3PkYcZhdkQAQidEg 更多資料分享:http://blog.51cto.com/3215120 《貝葉斯思維:統計建模的Python學習法》高清中文版PDF+高清英文版PDF+原始碼 高清中文版PDF,帶目錄和書籤,文字能夠

分享《思維統計建模Python學習》高清中文版PDF+高清英文版PDF+源代碼

復制 ges 源代碼 term alt log vpd ces 英文 下載:https://pan.baidu.com/s/1axiPTi3PkYcZhdkQAQidEg 更多資料分享:http://blog.51cto.com/3215120 《貝葉斯思維:統計建模的Py

分享《思維統計建模Python學習》+PDF+源碼+Allen B.Downey+許楊毅

ext img 中文版 下載 ESS size alt sha 分享圖片 下載:https://pan.baidu.com/s/130Wf-CymOIW4ELlh9ihVlg 更多資料分享:http://blog.51cto.com/14087171 《貝葉斯思維:統計建模

思維.統計建模Python學習(高清版)PDF

貝葉斯思維.統計建模的Python學習法(高清版)PDF百度網盤連結:https://pan.baidu.com/s/1gueMg4HDSzyflwdr3zPZCA 提取碼:m0fk 複製這段內容後開啟百度網盤手機App,操作更方便哦內容簡介 · · · · · · 這本書幫助那些希望用數學工具解決實際問題的

思維 統計建模Python學習pdf

  貝葉斯方法正在變得越來越常見與重要,但是卻沒有太多可以借鑑的資料來幫助初學者。基於Allen Downey在大學講授的本科課程,本書的計算方法能幫助你獲得一個良好的開端。  使用已有的程式設計技巧學習和理解貝葉斯統計  處理估計、預測、決策分析、假設的證據、假設檢驗等問題  從簡單的例子開始,包括硬幣問題

分析拋硬幣的概率真的是1/2嗎

前言 前面兩文介紹了貝葉斯學派的思想和先驗分佈、後驗分佈的相關知識,古典頻率學派認為拋硬幣的概率是常數,本文從貝葉斯學派的角度看待拋硬幣的概率問題。本文詳細介紹了 β分佈,重述貝葉斯思想,對於拋硬幣的概率問題作各種情況的分析,最後總結本文。 目錄 1、為什麼選擇β分佈作為先驗分佈

ml課程概率圖模型—網路、隱馬爾可夫模型相關(含程式碼實現)

以下是我的學習筆記,以及總結,如有錯誤之處請不吝賜教。 本文主要介紹機器學習中的一個分支——概率圖模型、相關基礎概念以及樸素貝葉斯、隱馬爾可夫演算法,最後還有相關程式碼案例。 說到機器學習的起源,可以分為以下幾個派別: 連線主義:又稱為仿生學派(bionicsism)或生理學派

樸素應用垃圾郵件分類

  import nltk nltk.download() from nltk.corpus import stopwords from nltk.stem import WordNetLemmatizer #預處理 def preprocessing(text): tokens

樸素應用垃圾郵件分類(更新)

#讀取資料集 import csv file_path=r'jiangnan.txt' sms=open(file_path,'r',encoding='utf-8') sms_data=[] sms_label=[] text=csv.reader(sms,delimiter='\t') text

第十次作業——樸素應用垃圾郵件分類

text = "Everybody knows waste paper and used coke cans are discarded everywhere. You might have seen plastic bags flying in the sky and getting caught i

情感分析背後的樸素及實現基於評論語料庫的影評情感分析(附程式碼)

一.情感分析的介紹       一句話概括情感分析:判斷出一句評價/點評/影評的正/負傾向性;       情感分析是一個二分類的問題,一種是可以直接判斷正負,一種是可以判斷情感偏向正負性的一個打分; 二,詞袋模型(向量空間模型) 2.1情感分析的流程    中文分

機器學習之樸素(NB)分類演算法與Python實現

樸素貝葉斯(Naive Bayesian)是最為廣泛使用的分類方法,它以概率論為基礎,是基於貝葉斯定理和特徵條件獨立假設的分類方法。 一、 概述 1.1 簡介 樸素貝葉斯(Naive Bayesian)是基於貝葉斯定理和特徵條件獨立假

【樸素分類】原理及python程式示例

1、基本原理 1.1 貝葉斯公式 有訓練集T={(x1,y1),(x2,y2)……,(xn,yn)},由P(X,Y)獨立同分布產生。X為輸入空間,即樣本的屬性。Y為輸出空間,即樣本的分類結果,設有

資料探勘十大演算法(九)樸素原理、例項與Python實現

一、條件概率的定義與貝葉斯公式 二、樸素貝葉斯分類演算法 樸素貝葉斯是一種有監督的分類演算法,可以進行二分類,或者多分類。一個數據集例項如下圖所示: 現在有一個新的樣本, X = (年齡:<=30, 收入:中, 是否學生:是, 信譽:中),目標是利用樸素貝

法則預測未來

本文節選自《演算法之美:指導工作與生活的演算法》中信出版集團,2018年05月出版人類獲得的所有

機器學習之(1)——學習樸素-三種模型理論+python程式碼程式設計例項

本文來源於: 部落格:http://blog.csdn.net/u012162613/article/details/48323777 http://blog.csdn.net/zhihaoma/article/details/51052064  感謝作者的分享,非常感謝

的概率推到,樸素分類器及Python實現

在瞭解貝葉演算法前:要有一定的概率與數理統計基礎以及注意事項 條件概率 首先,理解這兩個公式的前提是理解條件概率,因此先複習條件概率。 P(A|B)=P(AB)P(B)P(A|B)=P(AB)P(B) 那麼由條件概率出發,看一下變形出來的乘法公式:

樸素的概率理論及其python程式碼實現文字分類的例項

一:樸素貝葉斯是一種基於概率分佈進行分類的方法,概率論是樸素貝葉斯的基礎,之所以被稱為樸素,而不是貝葉斯就是因為它在貝葉斯的基礎上,增添了兩個條件,一個是各特徵之間相互獨立,第二是每個特徵同等重要。樸素貝葉斯在資料很小的情況下仍然有效,可以處理多分類問題,但是對輸入資料的準

數學 淺入淺

目的 最近上了 機器學習大學! 想把自己覺得有趣的知識整理下,以及看看這些基礎知識能在實際上有什麼應用。 什麼是貝葉斯 我的理解是 如果兩個事件相互聯絡那麼在概率上他們也存在一種聯絡,這種聯絡能被用來更加精確的得出概率結果。 比如,年齡和是否得病有關,那麼知道年齡從而