kde(kernel density estimation)是核密度估計。核的作用是根據(jù)離散采樣,估計連續(xù)密度分布。

成都創(chuàng)新互聯(lián)公司為客戶提供專業(yè)的成都網(wǎng)站制作、成都做網(wǎng)站、程序、域名、空間一條龍服務(wù),提供基于WEB的系統(tǒng)開發(fā). 服務(wù)項目涵蓋了網(wǎng)頁設(shè)計、網(wǎng)站程序開發(fā)、WEB系統(tǒng)開發(fā)、微信二次開發(fā)、移動網(wǎng)站建設(shè)等網(wǎng)站方面業(yè)務(wù)。
如果原始采樣是《陰陽師》里的式神,那么kernel(核函數(shù))就相當于御魂。
假設(shè)現(xiàn)在有一系列離散變量X = [4, 5, 5, 6, 12, 14, 15, 15, 16, 17],可見5和15的概率密度應(yīng)該要高一些,但具體有多高呢?有沒有三四層樓那么高,有沒有華萊士高?如果要估計的是沒有出現(xiàn)過的3呢?這就要自己判斷了。
核函數(shù)就是給空間的每個離散點都套上一個連續(xù)分布。最簡單的核函數(shù)是Parzen窗,類似一個方波:
這時候單個離散點就可以變成區(qū)間,空間或者高維空間下的超立方,實質(zhì)上是進行了升維。
設(shè)h=4,則3的概率密度為:
(只有4對應(yīng)的核函數(shù)為1,其他皆為0)
kernel是非負實值對稱可積函數(shù),表示為K,且一本滿足:
這樣才能保證cdf仍為1。
實際上應(yīng)用最多的是高斯核函數(shù)(Gaussian Kernel),也就是標準正態(tài)分布。所謂核密度估計就是把所有離散點的核函數(shù)加起來,得到整體的概率密度分布。核密度估計在很多機器學(xué)習(xí)算法中都有應(yīng)用,比如K近鄰、K平均等。
在支持向量機里,也有“核”的概念,同樣也是給數(shù)據(jù)升維,最常用的還是高斯核函數(shù),也叫徑向基函數(shù)(Radial Basis Funtion)。
seaborn.kdeplot內(nèi)置了多種kerne,總有一款適合你。
import pandasas pd
import numpyas np
import seabornas sns
import matplotlib.pyplotas plt
pd.set_option('display.max_columns', 10000)
pd.set_option('display.max_rows', 10000000000)
pd.set_option('display.width', 100000)
income = pd.read_excel(r'D:\bigData\0629demo\dataSource\income.xlsx')
fill_data = income.fillna(value={'workclass': income.workclass.mode()[0], 'occupation': income.occupation.mode()[0],
? ? ? ? ? ? ? ? ? ? ? ? ? ? 'native-country': income['native-country'].mode()[0]}, inplace=True)
# print(income.apply(lambda x: np.sum(x.isnull())))
# print(income)
print(income.describe())
print(income.describe(include=['object']))
# 設(shè)置繪圖風(fēng)格
plt.style.use('ggplot')
# 設(shè)置多圖形組合
fig, axes = plt.subplots(2, 1)
# 繪制不同收入水平下的年齡核密度圖
# kind='kde', label='=50K', ax=axes[0], legend=True, linestyle='-'
# kind='kde', label='50K', ax=axes[0], legend=True, linestyle='--'
income['age'][income.income ==' =50K'].plot(kind='kde', ax=axes[0], label='=50K', legend=True, linestyle='-')
income['age'][income.income ==' 50K'].plot(kind='kde', ax=axes[0], label='50K', legend=True, linestyle='--')
# 繪制不同收入水平下的周工作小時數(shù)核密度圖
# kind='kde', label='= 50K', ax=axes[1], legend=True,? linestyle='-'
# kind='kde', label=' 50K', ax=axes[1], legend=True, linestyle='--'
income['hours-per-week'][income.income ==' =50K'].plot(kind='kde', label='= 50K', ax=axes[1], legend=True,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? linestyle='-')
income['hours-per-week'][income.income ==' 50K'].plot(kind='kde', label=' 50K', ax=axes[1], legend=True,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? linestyle='--')
plt.show()
# 構(gòu)造不同收入水平下各種族人數(shù)的數(shù)據(jù)
race = pd.DataFrame(income.groupby(by=['race', 'income']).agg(np.size).loc[:, 'age'])
# 重設(shè)行索引
race = race.reset_index()
# 變量重命名
race.rename(columns={'age':'counts'}, inplace=True)
print(race)
# 排序
race.sort_values(by=['race', 'counts'], ascending=False, inplace=True)
# 構(gòu)造不同收入水平下各家庭關(guān)系人數(shù)的數(shù)據(jù)
relationship = pd.DataFrame(income.groupby(by=['relationship', 'income']).agg(np.size).loc[:, 'age'])
relationship = relationship.reset_index()
relationship.rename(columns={'age':'counts'}, inplace=True)
relationship.sort_values(by=['relationship', 'counts'], ascending=False, inplace=True)
plt.figure(figsize=(15, 10))
sns.barplot(x='race', y='counts', hue='income', data=race)
plt.show()
plt.figure(figsize=(15, 10))
sns.barplot(x='relationship', y='counts', hue='income', data=relationship)
plt.show()
pairplot函數(shù)。7在python中快速瀏覽數(shù)據(jù)集調(diào)用pairplot函數(shù),此函數(shù)使用散點圖和直方圖,還可以在非對角線上繪制回歸圖,在對角線上繪制核密度估計圖。
不寫出y=f(x)這樣的表達式,由隱函數(shù)的等式直接繪制圖像,以x2+y2+xy=1的圖像為例,使用sympy間接調(diào)用matplotlib工具的代碼和該二次曲線圖像如下(注意python里的乘冪符號是**而不是^,還有,python的sympy工具箱的等式不是a==b,而是a-b或者Eq(a,b),這幾點和matlab的區(qū)別很大)
直接在命令提示行的里面運行代碼的效果
from sympy import *;
x,y=symbols('x y');
plotting.plot_implicit(x**2+y**2+x*y-1);
作者:邁克爾·貝耶勒(Michael Beyeler)
如需轉(zhuǎn)載請聯(lián)系華章 科技
如果已安裝Anaconda Python版本,就已經(jīng)安裝好了可以使用的 Matplotlib。否則,可能要訪問官網(wǎng)并從中獲取安裝說明:
正如使用np作為 NumPy 的縮寫,我們將使用一些標準的縮寫來表示 Matplotlib 的引入:
在本書中,plt接口會被頻繁使用。
讓我們創(chuàng)建第一個繪圖。
假設(shè)想要畫出正弦函數(shù)sin(x)的線性圖。得到函數(shù)在x坐標軸上0≤x<10內(nèi)所有點的值。我們將使用 NumPy 中的 linspace 函數(shù)來在x坐標軸上創(chuàng)建一個從0到10的線性空間,以及100個采樣點:
可以使用 NumPy 中的sin函數(shù)得到所有x點的值,并通過調(diào)用plt中的plot函數(shù)把結(jié)果畫出來:
你親自嘗試了嗎?發(fā)生了什么嗎?有沒有什么東西出現(xiàn)?
實際情況是,取決于你在哪里運行腳本,可能無法看到任何東西。有下面幾種可能性:
1. 從.py腳本中繪圖
如果從一個腳本中運行 Matplotlib,需要加上下面的這行調(diào)用:
在腳本末尾調(diào)用這個函數(shù),你的繪圖就會出現(xiàn)!
2. 從 IPython shell 中繪圖
這實際上是交互式地執(zhí)行Matplotlib最方便的方式。為了讓繪圖出現(xiàn),需要在啟動 IPython 后使用所謂的%matplotlib魔法命令。
接下來,無須每次調(diào)用plt.show()函數(shù),所有的繪圖將會自動出現(xiàn)。
3. 從 Jupyter Notebook 中繪圖
如果你是從基于瀏覽器的 Jupyter Notebook 中看這段代碼,需要使用同樣的%matplotlib魔法命令。然而,也可以直接在notebook中嵌入圖形,這會有兩種輸出選項:
在本書中,將會使用inline選項:
現(xiàn)在再次嘗試一下:
上面的命令會得到下面的繪圖輸出結(jié)果:
如果想要把繪圖保存下來留作以后使用,可以直接在 IPython 或者 Jupyter Notebook 使用下面的命令保存:
僅需要確保你使用了支持的文件后綴,比如.jpg、.png、.tif、.svg、.eps或者.pdf。
作為本章最后一個測試,讓我們對外部數(shù)據(jù)集進行可視化,比如scikit-learn中的數(shù)字數(shù)據(jù)集。
為此,需要三個可視化工具:
那么開始引入這些包吧:
第一步是載入實際數(shù)據(jù):
如果沒記錯的話,digits應(yīng)該有兩個不同的數(shù)據(jù)域:data域包含了真正的圖像數(shù)據(jù),target域包含了圖像的標簽。相對于相信我們的記憶,我們還是應(yīng)該對digits稍加 探索 。輸入它的名字,添加一個點號,然后按Tab鍵:digits.TAB,這個操作將向我們展示digits也包含了一些其他的域,比如一個名為images的域。images和data這兩個域,似乎簡單從形狀上就可以區(qū)分。
兩種情況中,第一維對應(yīng)的都是數(shù)據(jù)集中的圖像數(shù)量。然而,data中所有像素都在一個大的向量中排列,而images保留了各個圖像8×8的空間排列。
因此,如果想要繪制出一副單獨的圖像,使用images將更加合適。首先,使用NumPy的數(shù)組切片從數(shù)據(jù)集中獲取一幅圖像:
這里是從1797個元素的數(shù)組中獲取了它的第一行數(shù)據(jù),這行數(shù)據(jù)對應(yīng)的是8×8=64個像素。下面就可以使用plt中的imshow函數(shù)來繪制這幅圖像:
上面的命令得到下面的輸出:
此外,這里也使用cmap參數(shù)指定了一個顏色映射。默認情況下,Matplotlib 使用MATLAB默認的顏色映射jet。然而,在灰度圖像的情況下,gray顏色映射更有效。
最后,可以使用plt的subplot函數(shù)繪制全部數(shù)字的樣例。subplot函數(shù)與MATLAB中的函數(shù)一樣,需要指定行數(shù)、列數(shù)以及當前的子繪圖索引(從1開始計算)。我們將使用for 循環(huán)在數(shù)據(jù)集中迭代出前十張圖像,每張圖像都分配到一個單獨的子繪圖中。
這會得到下面的輸出結(jié)果:
關(guān)于作者:Michael Beyeler,華盛頓大學(xué)神經(jīng)工程和數(shù)據(jù)科學(xué)專業(yè)的博士后,主攻仿生視覺計算模型,用以為盲人植入人工視網(wǎng)膜(仿生眼睛),改善盲人的視覺體驗。 他的工作屬于神經(jīng)科學(xué)、計算機工程、計算機視覺和機器學(xué)習(xí)的交叉領(lǐng)域。同時他也是多個開源項目的積極貢獻者。
本文摘編自《機器學(xué)習(xí):使用OpenCV和Python進行智能圖像處理》,經(jīng)出版方授權(quán)發(fā)布。
自哥本哈根氣候會議之后,全球日益關(guān)注氣候變化和溫室效應(yīng)等問題,并于會后建立了全球碳交易市場,分階段分批次減碳。本實驗獲取了美國 1979 - 2011 年間 NASA 等機構(gòu)對美國各地日均最高氣溫、降雨量等數(shù)據(jù),研究及可視化了氣候相關(guān)指標的變化規(guī)律及相互關(guān)系。
輸入并執(zhí)行魔法命令 %matplotlib inline, 并去除圖例邊框。
數(shù)據(jù)集介紹:
本數(shù)據(jù)集特征包括美國 49 個州(State),各州所在的地區(qū)(Region),統(tǒng)計年(Year),統(tǒng)計月(Month),平均光照(Avg Daily Sunlight),日均最大空氣溫度(Avg Daily Max Air Temperature ),日均最大熱指數(shù)(Avg Daily Max Heat Index ),日均降雨量(Avg Daily Precipitation ),日均地表溫度(Avg Day Land Surface Temperature)。
各特征的年度區(qū)間為:
導(dǎo)入數(shù)據(jù)并查看前 5 行。
篩選美國各大區(qū)域的主要氣候指數(shù),通過 sns.distplot 接口繪制指數(shù)的分布圖。
從運行結(jié)果可知:
光照能量密度(Sunlight),美國全境各地區(qū)分布趨勢大致相同,均存在較為明顯的兩個峰(強光照和弱光照)。這是因為非赤道國家受地球公轉(zhuǎn)影響,四季光照強度會呈現(xiàn)出一定的周期變化規(guī)律;
從地理區(qū)位能看出,東北部光照低谷明顯低于其他三個區(qū)域;
日均最高空氣溫度(Max Air Temperature),美國全境各地區(qū)表現(xiàn)出較大差異,東北部和中西部趨勢大致相同,氣溫平緩期較長,且包含一個顯著的尖峰;西部地區(qū)平緩期最長,全年最高溫均相對穩(wěn)定;南部分布則相對更為集中;
日均地表溫度(Land Surface Temperature),與最高空氣溫度類似,不同之處在于其低溫區(qū)分布更少;
最大熱指數(shù)(Max Heat Index),西部與中西部分布較為一致,偏溫和性溫度,東北部熱指數(shù)偏高,南部偏低;
降雨量(Precipitation),西部明顯偏小,南部與東北部大致相同,中西部相對較多。
結(jié)合地理知識做一個總結(jié):
東北部及大多數(shù)中西部地區(qū),屬于溫帶大陸性氣候,四季分明,夏季悶熱,降雨較多。
西部屬于溫帶地中海氣候,全年氣候溫和,并且干燥少雨,夏季氣候溫和,最高溫度相對穩(wěn)定。
南部沿海一帶,終年氣候溫暖,夏季炎熱,雨水充沛。
按月計算美國各地區(qū)降雨量均值及標準偏差,以均值 ± 一倍標準偏差繪制各地區(qū)降雨量誤差線圖。
從運行結(jié)果可知:
在大多數(shù)夏季月份,西部地區(qū)降雨量遠小于其他地區(qū);
西部地區(qū)冬季月降雨量高于夏季月;
中西部地區(qū)是較為典型的溫帶大陸性氣候,秋冬降雨逐漸減少,春夏降雨逐漸升高;
南部地區(qū)偏向海洋性氣候,全年降雨量相對平均。
需要安裝joypy包。
日均最高氣溫變化趨勢
通過 joypy 包的 joyplot 接口,可以繪制帶堆積效應(yīng)的直方分布曲線,將 1980 年 - 2008 年的日均最高溫度按每隔 4 年的方式繪制其分布圖,并標注 25%、75% 分位數(shù)。
從運行結(jié)果可知:
1980 - 2008 年區(qū)間,美國全境日均最高溫度分布的低溫區(qū)正逐漸升高,同時高溫區(qū)正逐漸降低,分布更趨向于集中;
1980 - 2008 年區(qū)間,美國全境日均最高溫度的 25% 分位數(shù)和 75% 分位數(shù)有少量偏離但并不明顯。
日均降雨量變化趨勢
同樣的方式對降雨量數(shù)據(jù)進行處理并查看輸出結(jié)果。
篩選出加州和紐約州的日均降雨量數(shù)據(jù),通過 plt.hist 接口繪制降雨量各月的分布圖。
從運行結(jié)果可知:
加州地區(qū)降雨量多集中在 0 - 1 mm 區(qū)間,很少出現(xiàn)大雨,相比而言,紐約州則顯得雨量充沛,日均降雨量分布在 2 - 4 mm 區(qū)間。
直方圖在堆積效應(yīng)下會被覆蓋大多數(shù)細節(jié),同時表達聚合、離散效應(yīng)的箱線圖在此類問題上或許是更好的選擇。
通過 sns.boxplot 接口繪制加州和紐約州全年各月降雨量分布箱線圖.
從箱線圖上,我們可以清晰地對比每個月兩個州的降雨量分布,既可以看到集中程度,例如七月的加州降雨量集中在 0.1 - 0.5 mm 的窄區(qū)間,說明此時很少會有大雨;又可以看到離散情況,例如一月的加州,箱線圖箱子(box)部分分布較寬,且上方 10 mm 左右存在一個離散點,說明此時的加州可能偶爾地會出現(xiàn)大到暴雨。
視覺上更為美觀且簡約的是擺動的誤差線圖,實驗 「美國全境降雨量月度分布」 將所有類別標簽的 x 位置均放于同一處,導(dǎo)致誤差線高度重合。可通過調(diào)節(jié) x 坐標位置將需要對比的序列緊湊排布。
從輸出結(jié)果可以看出,加州冬季的降雨量不確定更強,每年的的十一月至次年的三月,存在降雨量大,且降雨量存在忽多忽少的現(xiàn)象(誤差線長)。
上面的實驗均在研究單變量的分布,但經(jīng)常性地,我們希望知道任意兩個變量的聯(lián)合分布有怎樣的特征。
核密度估計 , 是研究此類問題的主要方式之一, sns.kdeplot 接口通過高斯核函數(shù)計算兩變量的核密度函數(shù)并以等高線的形式繪制核密度。
從運行結(jié)果可知:
加州在高溫區(qū)和低降雨期存在一個較為明顯的高密度分布區(qū)(高溫少雨的夏季);
紐約州在高溫及低溫區(qū)均存在一個高密度的分布區(qū),且在不同溫區(qū)降雨量分布都較為均勻。
將美國全境的降雨量與空氣溫度通過 plt.hist2d 接口可視化。
從運行結(jié)果可知:
美國全境最高密度的日均高溫溫度區(qū)域和降雨量區(qū)間分別為,78 F (約等于 25 C)和 2.2 mm 左右,屬于相對舒適的生活氣候區(qū)間。
美國全境降雨量與空氣溫度的關(guān)系-核密度估計
在上面實驗基礎(chǔ)上,在 x, y 軸上分別通過 sns.rugplot 接口繪制核密度估計的一維分布圖,可在一張繪圖平面上同時獲取聯(lián)合分布和單變量分布的特征。
美國全境降雨量與空氣溫度的關(guān)系-散點分布和直方分布
sns.jointplot 接口通過柵格的形式,將單變量分布用子圖的形式進行分別繪制,同時通過散點圖進行雙變量關(guān)系的展示,也是一種較好的展現(xiàn)數(shù)據(jù)分布的方式。
上面兩個實驗研究了雙變量分布的可視化,以下研究 3 變量聚合結(jié)果的可視化。
通過 sns.heatmap 接口可實現(xiàn)對透視數(shù)據(jù)的可視化,其原理是對透視結(jié)果的值賦予不同的顏色塊,以可視化其值的大小,并通過顏色條工具量化其值大小。
上面的兩個實驗可視化了各州隨年份日均最高溫度的中位數(shù)變化趨勢,從圖中并未看出有較為顯著地變化。
以下通過 t 檢驗的方式查看統(tǒng)計量是否有顯著性差異。stats.ttest_ind 接口可以輸出 1980 年 與 2010 年主要氣候指數(shù)的顯著性檢驗統(tǒng)計量及 p 值。
從運行結(jié)果可以看出:
檢驗結(jié)果拒絕了降雨量相等的原假設(shè),即 1980 年 與 2010 年兩年間,美國降雨量是不同的,同時沒有拒絕日均日照、日均最大氣溫兩個變量相等的原假設(shè),說明氣溫未發(fā)生顯著性變化。
網(wǎng)站標題:python畫核密度函數(shù),python畫密度曲線
瀏覽路徑:http://chinadenli.net/article11/dsghdgd.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、ChatGPT、用戶體驗、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計公司、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)