最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用seaborn繪制強化學(xué)習(xí)中的圖片問題

 更新時間:2023年01月31日 10:29:28   作者:johnjim0816  
這篇文章主要介紹了使用seaborn繪制強化學(xué)習(xí)中的圖片問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

seaborn繪制強化學(xué)習(xí)中的圖片

seaborn可以說是matplotlib的升級版,使用seaborn繪制折線圖時參數(shù)數(shù)據(jù)可以傳遞ndarray或者pandas,方便又好看!

本篇用繪制強化學(xué)習(xí)中的rewards舉例,實際上也可以用來機器學(xué)習(xí)中的loss曲線,原理類似。

從一個簡單示例開始

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns # 導(dǎo)入模塊
sns.set() # 設(shè)置美化參數(shù),一般默認(rèn)就好

rewards = np.array([0, 0.1,0,0.2,0.4,0.5,0.6,0.9,0.9,0.9])
plt.plot(rewards)
plt.show()

如上首先導(dǎo)入seaborn模塊,并設(shè)置美化參數(shù)(aesthetic parameters)sns.set(),使用matplotlib.pyplot as plt就可以繪制一個基本的圖像:

使用sns.lineplot或者sns.relplot

實際上relplot包含lineplot和scatterplot,并通過kind傳參可以轉(zhuǎn)換為lineplot,

relplot(kind="line")等價于lineplot
relplot(kind="scatter")等價于scatterplot

然后再進行適當(dāng)?shù)恼{(diào)整并加上x,y軸的label,如下:

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns; sns.set() # 因為sns.set()一般不用改,可以在導(dǎo)入模塊時順便設(shè)置好

rewards = np.array([0, 0.1,0,0.2,0.4,0.5,0.6,0.9,0.9,0.9])
sns.lineplot(x=range(len(rewards)),y=rewards)
# sns.relplot(x=range(len(rewards)),y=rewards,kind="line") # 與上面一行等價
plt.xlabel("episode")
plt.ylabel("reward")
plt.show()

最后呈現(xiàn)效果如下:

繪制rewards聚合圖

當(dāng)我們對同一實驗作出多次得到一組rewards時,如下:

rewards1 = np.array([0, 0.1,0,0.2,0.4,0.5,0.6,0.9,0.9,0.9])
rewards2 = np.array([0, 0,0.1,0.4,0.5,0.5,0.55,0.8,0.9,1])
rewards=np.vstack((rewards1,rewards2)) # 合并成二維數(shù)組

我們希望繪制出聚合圖,但是sns.lineplot無法輸入一維以上的數(shù)據(jù),我們可以將它們?nèi)哭D(zhuǎn)為一維,雖然有些難看:

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns; sns.set() # 因為sns.set()一般不用改,可以在導(dǎo)入模塊時順便設(shè)置好

rewards1 = np.array([0, 0.1,0,0.2,0.4,0.5,0.6,0.9,0.9,0.9])
rewards2 = np.array([0, 0,0.1,0.4,0.5,0.5,0.55,0.8,0.9,1])
rewards=np.concatenate((rewards1,rewards2)) # 合并數(shù)組
episode1=range(len(rewards1))
episode2=range(len(rewards2))
episode=np.concatenate((episode1,episode2))
sns.lineplot(x=episode,y=rewards)
plt.xlabel("episode")
plt.ylabel("reward")
plt.show()

結(jié)果如圖:

繪制出了帶聚合陰影的圖,實際上實際部分是seaborn默認(rèn)對同一x軸的多個y值即rewards做了均值,陰影部分表示多組rewards的范圍,可以使用sns.lineplot(x=episode,y=rewards,ci=None)去掉。

使用pandas傳參

上面都是用ndarray傳參,這樣一方面免不了與matplotlib.pyplot混雜的成分比如plt.xlabel,另外繪制rewards聚合圖,也比較麻煩。

既然使用pandas傳參,就需要先把array轉(zhuǎn)成DataFrame形式,如下:

import numpy as np
import pandas as pd
rewards1 = np.array([0, 0.1,0,0.2,0.4,0.5,0.6,0.9,0.9,0.9])
rewards2 = np.array([0, 0,0.1,0.4,0.5,0.5,0.55,0.8,0.9,1])
rewards=np.vstack((rewards1,rewards2)) # 合并數(shù)組
df = pd.DataFrame(rewards).melt(var_name='episode',value_name='reward') # 推薦這種轉(zhuǎn)換方法
print(df)

推薦上述轉(zhuǎn)化方法,這樣無論rewards多少維都不影響最終的繪圖方式,其中melt方法將所有維合并成一列,var_name='episode',value_name='reward'則更改對應(yīng)的列名,轉(zhuǎn)化結(jié)果如下:

   episode  reward
0        0     0.0
1        0     0.1
2        0     0.0
3        0     0.2
4        0     0.4
5        0     0.5
6        0     0.6
7        0     0.9
8        0     0.9
9        0     0.9

下面完整繪圖:

import seaborn as sns;sns.set()
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

import pandas as pd
rewards1 = np.array([0, 0.1,0,0.2,0.4,0.5,0.6,0.9,0.9,0.9])
rewards2 = np.array([0, 0,0.1,0.4,0.5,0.5,0.55,0.8,0.9,1])
rewards=np.vstack((rewards1,rewards2)) # 合并數(shù)組
df = pd.DataFrame(rewards).melt(var_name='episode',value_name='reward')

sns.lineplot(x="episode", y="reward", data=df)
plt.show()

注意這里的x,y不再傳入數(shù)組,而是傳入DataFrame中對應(yīng)的列名,類似于python字典中的鍵

結(jié)果如下:

牛刀小試

最后繪制一個更為復(fù)雜的可以用于paper的繪制方法:

import seaborn as sns; sns.set()
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

def get_data():
    '''獲取數(shù)據(jù)
    '''
    basecond = np.array([[18, 20, 19, 18, 13, 4, 1],[20, 17, 12, 9, 3, 0, 0],[20, 20, 20, 12, 5, 3, 0]])
    cond1 = np.array([[18, 19, 18, 19, 20, 15, 14],[19, 20, 18, 16, 20, 15, 9],[19, 20, 20, 20, 17, 10, 0]]) 
    cond2 = np.array([[20, 20, 20, 20, 19, 17, 4],[20, 20, 20, 20, 20, 19, 7],[19, 20, 20, 19, 19, 15, 2]]) 
    cond3 = np.array([[20, 20, 20, 20, 19, 17, 12],[18, 20, 19, 18, 13, 4, 1], [20, 19, 18, 17, 13, 2, 0]])    
    return basecond, cond1, cond2, cond3
    
data = get_data()
label = ['algo1', 'algo2', 'algo3', 'algo4']
df=[]
for i in range(len(data)):
    df.append(pd.DataFrame(data[i]).melt(var_name='episode',value_name='loss'))
    df[i]['algo']= label[i] 

df=pd.concat(df) # 合并
sns.lineplot(x="episode", y="loss", hue="algo", style="algo",data=df)
plt.title("some loss")
plt.show()

結(jié)果如下:

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python 對象和json互相轉(zhuǎn)換方法

    python 對象和json互相轉(zhuǎn)換方法

    下面小編就為大家分享一篇python 對象和json互相轉(zhuǎn)換方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • 舉例講解Python中metaclass元類的創(chuàng)建與使用

    舉例講解Python中metaclass元類的創(chuàng)建與使用

    在Python中我們用type函數(shù)可以動態(tài)地創(chuàng)建一個元類,同樣也可以用__metaclass__屬性來指定一個元類,接下來我們就來具體舉例講解Python中metaclass元類的創(chuàng)建與使用
    2016-06-06
  • Python 字符串與數(shù)字輸出方法

    Python 字符串與數(shù)字輸出方法

    今天小編小編就為大家分享一篇Python 字符串與數(shù)字輸出方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python實現(xiàn)批量下載文件

    Python實現(xiàn)批量下載文件

    之前給大家分享的python 多線程抓取網(wǎng)頁,不過這個只能用python 來抓取到網(wǎng)頁的源代碼,如果你想用做python 下載文件的話,上面的可能就不適合你了,最近我在用python 做文件下載的時候就遇到這個問題了,不過最終得以解決,我把代碼發(fā)出來
    2015-05-05
  • scrapy框架中用ssh連接遠(yuǎn)程服務(wù)器的實現(xiàn)

    scrapy框架中用ssh連接遠(yuǎn)程服務(wù)器的實現(xiàn)

    本文主要介紹了scrapy?框架中用ssh連接遠(yuǎn)程服務(wù)器的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • python 發(fā)送qq郵件的示例

    python 發(fā)送qq郵件的示例

    這篇文章主要介紹了python 發(fā)送qq郵件的示例,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • Python使用PyMySql增刪改查Mysql數(shù)據(jù)庫的實現(xiàn)

    Python使用PyMySql增刪改查Mysql數(shù)據(jù)庫的實現(xiàn)

    PyMysql是Python中用于連接MySQL數(shù)據(jù)庫的一個第三方庫,本文主要介紹了Python使用PyMySql增刪改查Mysql數(shù)據(jù)庫的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • django之如何按日期查詢數(shù)據(jù)

    django之如何按日期查詢數(shù)據(jù)

    這篇文章主要介紹了django之如何按日期查詢數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python繪制可以表示點密度的散點圖得方法

    Python繪制可以表示點密度的散點圖得方法

    本文介紹基于Python語言的matplotlib模塊,對Excel表格文件中的指定數(shù)據(jù),加以密度散點圖繪制的方法,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-05-05
  • Flask交互基礎(chǔ)(GET、 POST 、PUT、 DELETE)的使用

    Flask交互基礎(chǔ)(GET、 POST 、PUT、 DELETE)的使用

    這篇文章主要介紹了Flask交互基礎(chǔ)(GET、 POST 、PUT、 DELETE)的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評論

满洲里市| 林周县| 故城县| 玛纳斯县| 隆安县| 新蔡县| 石河子市| 门头沟区| 平安县| 南乐县| 灵丘县| 淳化县| 罗山县| 海淀区| 湖南省| 望都县| 宁远县| 平顺县| 突泉县| 禹州市| 东至县| 阳山县| 健康| 阿坝县| 新巴尔虎右旗| 车险| 综艺| 无为县| 阿克苏市| 高台县| 东港市| 麻阳| 武邑县| 商洛市| 阿瓦提县| 洛扎县| 青海省| 康保县| 成都市| 凯里市| 县级市|