機器學習入門系列②|如何在Python中生成隨機數

從人工神經網路中權重的隨機初始化,到將資料分成隨機訓練集和測試集,再到隨機梯度下降中訓練資料集的隨機混洗,生成隨機數和利用隨機性是一項必備技能。

本文講解了如何在 Python 中生成和使用隨機數

。完成本教程後,你能夠了解:

這種隨機性可以透過使用偽隨機數生成器應用於程式中。

如何透過Python標準庫生成隨機數和使用隨機性。

如何透過NumPy庫生成隨機數陣列。

大家先來看下本教程的目錄:

1.偽隨機數發生器

2.Python 標準庫中的隨機數

種子隨機數生成器

隨機浮點值

隨機整數值

隨機高斯值

從列表中隨機選擇

列表中的隨機子樣本

隨機打亂列表

3.使用NumPy處理隨機數

種子隨機數生成器

隨機浮點值陣列

隨機整數值陣列

隨機高斯值陣列

隨機排列NumPy陣列

以後自己敲程式碼用到這個知識點的時候,按著這個學習思路回憶一遍整個知識點,加強記憶,能夠培養程式碼思維能力。

1. 偽隨機數發生器

我們注入程式和演算法的隨機性來源是一種稱為偽隨機數生成器的數學技巧。

隨機數生成器是一種從真正的隨機源生成隨機數的系統。通常是物理的東西,比如蓋革計數器,結果會變成隨機數

。我們在機器學習中不需要真正的隨機性。相反,我們可以使用偽隨機性。偽隨機性是一個看起來接近隨機的數字樣本,但它是使用確定性過程生成的。

混洗資料和用隨機值初始化係數使用偽隨機數生成器

。這些小程式通常是一個可以呼叫的函式,它會返回一個隨機數。再次呼叫,他們將返回一個新的隨機數。包裝函式通常也可用,並允許你將隨機性作為整數、浮點數、特定分佈內、特定範圍內等。

數字是按順序生成的。該序列是確定性的,並以初始數字作為種子。如果你沒有明確地為偽隨機數生成器設定種子(seed),那麼

它可能會使用以秒或毫秒為單位的當前系統時間作為種子(seed)。

種子的價值並不重要。選擇任何你想要的。重要的是該過程的相同種子將導致相同的隨機數序列。

2. Python 標準庫中的隨機數

Python標準庫提供了一個名為random的模組,該模組提供了一套用於生成隨機數的函式。

Python使用一種流行且強大的偽隨機數生成器,稱為Mersenne Twister。

在本節中,我們將檢視一些使用標準Python API生成和使用隨機數和隨機性的用例。

種子隨機數生成器

偽隨機數生成器是一個數學函式,它生成一個幾乎隨機數的序列。

它需要一個引數來啟動序列,稱為種子。

該函式是確定性的,這意味著給定相同的種子,它每次都會產生相同的數字序列。種子的選擇並不重要。

seed()函式將播種的偽隨機數發生器,以整數值作為引數,如1或7。如果seed()函式之前沒有使用隨機性呼叫時,預設是使用當前系統時間中從epoch (1970) 開始的毫秒數。

下面的示例演示了為偽隨機數生成器設定種子,生成一些隨機數

,並顯示為生成器重新設定種子將導致生成相同的數字序列。

機器學習入門系列②|如何在Python中生成隨機數

執行示例為偽隨機數生成器

設定值為1的種子,生成3個隨機數

,重新設定生成器的種子,並顯示生成了相同的三個隨機數。

機器學習入門系列②|如何在Python中生成隨機數

透過設定種子來確保你的程式碼每次產生相同的結果來控制隨機性非常有用,例如在生產模型中。

對於使用隨機化來控制混雜變數的執行實驗,可以為每個實驗執行使用不同的種子。

隨機浮點值

可以使用random()函式生成隨機浮點值。值將在0和1之間的範圍內生成,特別是在區間 [0,1] 中。

值是從均勻分佈中抽取的,這意味著每個值被抽取的機會均等。

下面的示例生成10個隨機浮點值。

機器學習入門系列②|如何在Python中生成隨機數

執行示例生成並列印每個隨機浮點值。

機器學習入門系列②|如何在Python中生成隨機數

透過將浮點值乘以新範圍的大小並新增最小值,可以將浮點值重新縮放到所需範圍

,如下所示:

機器學習入門系列②|如何在Python中生成隨機數

其中min和max分別是所需範圍的最小值和最大值,value是在0和1之間的範圍內隨機生成的浮點值。

隨機整數值

可以使用randint()函式生成隨機整數值。

此函式採用兩個引數:生成的整數值範圍的開始和結束。隨機整數是在範圍值的開始和結束之內生成的,特別是在區間 [start, end] 中。隨機值取自均勻分佈。

下面的示例生成0到10之間的10個隨機整數值。

機器學習入門系列②|如何在Python中生成隨機數

執行示例生成並列印10個隨機整數值。

機器學習入門系列②|如何在Python中生成隨機數

隨機高斯值

可以使用gauss()函式從高斯分佈中提取隨機浮點值。

該函式採用兩個引數,分別對應於控制分佈大小的引數,特別是均值和標準差。

下面的示例從均值為0。0且標準差為1。0的高斯分佈中生成10個隨機值。

請注意,這些引數不是值的界限,值的分佈將由分佈的鐘形控制,在這種情況下,按比例可能高於和低於0。0。

機器學習入門系列②|如何在Python中生成隨機數

執行示例生成並列印10個高斯隨機值。

機器學習入門系列②|如何在Python中生成隨機數

從列表中隨機選擇

隨機數可用於從列表中隨機選擇一個專案。

例如,如果一個列表有10個索引在0到9之間的專案,那麼你可以生成一個0到9之間的隨機整數,並使用它從列表中隨機選擇一個專案。該choice()函式實現這種行為。以統一的可能性進行選擇。

下面的示例生成一個包含20個整數的列表,並給出了從列表中隨機選擇一項的五個示例。

機器學習入門系列②|如何在Python中生成隨機數

執行該示例首先列印整數值列表,然後是從列表中選擇和列印隨機值的五個示例。

機器學習入門系列②|如何在Python中生成隨機數

列表中的隨機子樣本

我們可能對重複從列表中隨機選擇專案以建立隨機選擇的子集感興趣。

重要的是,一旦從列表中選擇了一個專案並將其新增到子集中,就不應再次新增。這稱為無替換選擇,因為一旦從列表中為子集選擇了一個專案,它就不會被添加回原始列表

(即不能用於重新選擇)。

此行為在sample()函式中提供,該函式從列表中隨機選擇一個樣本而無需替換。該函式將列表和子集的大小作為引數進行選擇。請注意,專案實際上並未從原始列表中刪除,只是選擇到列表的副本中。

下面的示例演示從20個整數列表中選擇五個專案的子集。

機器學習入門系列②|如何在Python中生成隨機數

執行該示例首先列印整數值列表,然後選擇並列印隨機樣本進行比較。

機器學習入門系列②|如何在Python中生成隨機數

隨機打亂列表

隨機性可用於洗牌專案列表,例如shuffling。

該shuffle()函式可用於洗牌的列表。shuffle就地執行,

這意味著作為引數提供給shuffle()函式的列表被打亂,而不是被建立和返回的列表的打亂副本

下面的示例演示了隨機打亂整數值列表。

機器學習入門系列②|如何在Python中生成隨機數

執行該示例首先列印整數列表,然後在隨機打亂後列印相同的列表。

機器學習入門系列②|如何在Python中生成隨機數

3. NumPy的隨機數

在機器學習中,你可能會使用scikit-learn和Keras等庫。

這些庫在幕後使用了NumPy,該庫可以非常高效地處理數字的向量和矩陣。

NumPy也有自己的偽隨機數生成器和便利包裝函式的實現。

NumPy還實現了Mersenne Twister偽隨機數生成器。

讓我們看幾個生成隨機數和將隨機性與

NumPy陣列結合

使用的示例。

種子隨機數生成器

NumPy偽隨機數生成器不同於Python標準庫偽隨機數生成器。

重要的是,在Python偽隨機數生成器中新增種子不會影響NumPy偽隨機數生成器。它必須單獨播種和使用。

seed()函式可以被用於接種的NumPy的偽隨機數發生器,將整數作為seed值。

下面的示例演示瞭如何為生成器設定seed以及為生成器重新設定seed將如何導致生成相同的隨機數序列。

機器學習入門系列②|如何在Python中生成隨機數

執行示例為偽隨機數生成器提供種子,列印隨機數序列,然後為生成器重新設定種子,顯示生成的隨機數序列完全相同。

機器學習入門系列②|如何在Python中生成隨機數

隨機浮點值陣列

可以使用rand()NumPy函式生成隨機浮點值陣列。

如果未提供引數,則建立單個隨機值,否則可以指定陣列的大小。

下面的示例建立了一個從均勻分佈中提取的10個隨機浮點值的陣列。

機器學習入門系列②|如何在Python中生成隨機數

執行該示例會生成並列印隨機浮點值的NumPy陣列。

機器學習入門系列②|如何在Python中生成隨機數

隨機整數值陣列

可以使用randint() NumPy函式生成隨機整數陣列。

此函式接受三個引數,範圍的下限、範圍的上限以及要生成的整數值的數量或陣列的大小。

隨機整數將從包括較低值和不包括較高值的均勻分佈中抽取,例如在區間 [lower, upper) 中。

下面的示例演示了生成隨機整數陣列。

機器學習入門系列②|如何在Python中生成隨機數

執行該示例會生成並列印一個由0到10之間的20個隨機整數值組成的陣列。

機器學習入門系列②|如何在Python中生成隨機數

隨機高斯值陣列

可以使用randn()NumPy函式生成隨機高斯值陣列。

此函式採用單個引數來指定結果陣列的大小。高斯值取自標準高斯分佈

;這是一個均值為 0。0 且標準差為 1。0 的分佈。

下面的示例顯示瞭如何生成隨機高斯值陣列。

機器學習入門系列②|如何在Python中生成隨機數

執行示例生成並列印來自標準高斯分佈的 10 個隨機值陣列。

機器學習入門系列②|如何在Python中生成隨機數

來自標準高斯分佈的值可以透過將值乘以標準偏差並新增來自所需縮放分佈的平均值來縮放。例如:

機器學習入門系列②|如何在Python中生成隨機數

其中mean and stdev是用於期望縮放高斯分佈的均值和標準差和值是從一個標準高斯分佈的隨機生成值。

隨機排列NumPy陣列

NumPy陣列可以使用shuffle() NumPy函式就地隨機打亂。

下面的示例演示瞭如何打亂NumPy陣列。

機器學習入門系列②|如何在Python中生成隨機數

執行該示例首先生成一個包含20個整數值的列表,然後打亂並列印打亂後的陣列。

機器學習入門系列②|如何在Python中生成隨機數

如有部分翻譯問題請多擔待咩哈哈哈哈!