机器学习四剑客1——Numpy
求業之精,別無他法,日專而已矣!
一、概論
? ? ? ? 1.機器學習是什么
? ? ? ? 2.機器學習做什么
? ? ? ? 3.機器學習基本概念
二、機器學習第一步:數據分析
????????1.Python被大量應用在數據挖掘和深度學習領域;
????????2.其中使用極其廣泛的是Numpy、Pandas、Matplotlib、PIL等庫;
????????3.數據分析流程:提出問題--準備數據--分析數據--或的結論--成果可視化。
三、機器學習四劍客(Numpy、Pandas、PIL、Matplotlib)
? ? ? ? 1.Numpy:是高性能科學計算和數據分析的基礎包。
? ? ? ? 2.Pandas:是python第三方庫,提供高性能易用數據類型和分析工具。
? ? ? ? 3.PIL:是一個具有強大圖像處理能力的第三方庫。用途:圖像處理
? ? ? ? 4.Matplotlib:是一個主要用于繪制二維圖形的Python庫。用途:繪圖、可視化
四、四劍客的應用
? ? ? ? 1.數據增強:深層神經網絡一般都需要大量的訓練數據才能獲得比較理想的結果。在數據量有限的情況下,可以通過數據增強(Data Augmentation)來增加樣本的多樣性,提高模型魯棒性。
? ? ? ? 1)增加數據量(翻轉/噪聲/旋轉/裁剪/縮放/拉伸/模糊)
? ? ? ? 2)采集更多的圖像特征
? ? ? ? 3)使網絡可見更多的數據變化,提高模型的泛化能力
????????2.訓練可視化
? ? ? ? 3.數據可視化
第一節:Numpy
- Numpy(Numerical Python的簡稱)是高性能科學計算和數據分析的基礎包。其功能如下:
- ndarray,一個具有矢量算術運算和復雜廣播能力的快速且節省空間的多維數組。
- ndarray數組是Numpy的基礎數據結構。
- 用于對整組數據進行快速運算的標準數學函數(無需編寫循環)。
- 用于讀寫磁盤數據的工具以及用于操作內存映射文件的工具。
- 線性代數、隨機數生成以及傅里葉變換功能。
- 用于集成由C、C++、Fortran等語言編寫的代碼的工具。
優點:1)批量操作比列表更快;2)支持廣播機制,矩陣運算不需要寫for循環;3)底層C語言;
# 創建ndarray
import numpy as np
data = [1, 2, 3, 4]
arr = np.array(data) # 創建ndarray
print(arr)
print(type(arr))
>>函數一: numpy.zeros() 用于機器學習程序中,函數提供給定形狀和類型的新數組, 并用零填充。
# 模板:numpy.zeros(shape, dtype=float, order='C')import numpy as np
arr_zero = np.zeros(5, dtype=int, order='C')
print(arr_zero)
print(arr_zero.dtype)
print(type(arr_zero))
參數解析:numpy.zeros(shape, dtype=float, order='C')
1)shape:整數或整數元組??此參數創建數組的形狀, 例如(3, 2)或2。
2)dtype:數據類型(可選)? ? 此參數用于定義數組的所需數據類型。默認情況下, 數據類型為numpy.float64。此參數對于定義不是必需的。
3)order:{‘C’, ‘F’}(可選)? ?此參數用于定義存儲數據的順序, 即行(C樣式)或列(Fortran樣式)。
拓展:np.empty()?函數創建一個沒有任何具體值的ndarray數組,是創建數組最快的方法,根據給定的維度和數值類型返回一個新的數組,其元素不進行初始化。
import numpy as np# 創建全1數組
arr_one = np.ones((2,2), dtype=int, order='C')
print(arr_one)
print(arr_one.dtype)# 創建全1數組
arr_empty = np.empty((2,2))
print(arr_empty)
print(arr_empty.dtype)# np.empty()函數創建一個沒有任何具體值的ndarray數組,是創建數組最快的方法。
# 根據給定的維度和數值類型返回一個新的數組,其元素不進行初始化。
>>函數二:?創建隨機數組
import numpy as np# 01 創建隨機數組#設置隨機數種子
np.random.seed(10)# 均勻分布
arr1 = np.random.rand(2,2) # 創建指定形狀的數組(范圍在0至1之間)
arr2 = np.random.uniform(0,10) # 創建指定范圍內的一個數
arr3 = np.random.randint(0,10) # 創建指定范圍內的一個整數# 正態分布
a = np.random.randn(3,3) # 生成標準正態分布隨機數
arr4 = np.random.normal(0.5, 0.1, (2,2)) # 給定均值/標準差/維度的正態分布# 02 隨機打亂數組序列
np.random.shuffle(a)
print(a)print('arr1:', arr1)
print('arr2:', arr2)
print('arr3:', arr3)
print('arr4:', arr4)# 查看ndarray的常用屬性
print(arr4.size) # 數組元素個數
print(arr4.shape) # 數組形狀
print(arr4.ndim) # 數組維度
print(arr4.dtype) # 數組元素類型
>>函數三:?數組的運算
- 標量和ndarray數組之間運算;
- 兩個ndarray數組之間運算;
注意:大小相等的數組之間的任何算術運算都會將運算應用到元素級,數組與標量的算術運算也會將標量值傳播到各個元素。矢量化(vectorization):不用編寫循環即可對數據執行批量運算。
# 數組和標量之間的運算import numpy as np
arr = np.array([[1, 2], [3, 4], [5, 6]])
print('arr + arr = \n', arr + arr)
print('arr - arr = \n', arr - arr)
print('arr * arr = \n', arr * arr)
print('arr / arr = \n', arr / arr)
print('arr + 1 = \n', arr + 1)
print('arr - 1 = \n', arr - 1)
print('arr * 2 = \n', arr * 2)
print('arr / 2 = \n', arr / 2)
print('1 / arr = \n', 1 / arr)
print('arr ** 2 = \n', arr**2)
>>函數四:?數組的索引和切片
注意:跟列表最重要的區別在于,數組切片是原始數組的視圖。這意味著數據不會被復制,視圖上的任何修改都會直接反映到源數組上。
# 數組的索引和切片import numpy as nparr = np.arange(10)
print(arr)
arr_slice = arr[4:8]
print(arr_slice)
arr_slice[:] = 20 # 將一個標量值賦值給一個切片時,該值會自動傳播到整個選區
print(arr_slice)
print(arr)
>>函數五:?數學和統計方法
注意:可以通過數組上的一組數學函數對整個數組或某個軸向的數據進行統計計算 ,sum、mean以及標準差std等聚合計算既可以當做數組的實例方法調用,也可以當做頂級Numpy函數使用。
# 數學和統計方法import numpy as np
arr = np.random.randn(3,3) # 隨機創建指定形狀數組
print(arr)
print(np.mean(arr)) # 對所有元素求均值
print(arr.mean()) # 對所有元素求均值
print('------------------------------------------')
print('0',np.mean(arr, 0)) # 壓縮行,對各列求均值
print(arr.mean(axis=0)) # 壓縮行,對各列求均值print('1',np.mean(arr, 1)) # 壓縮列,對各行求均值
print(arr.mean(axis=1)) # 壓縮列,對各行求均值
print('------------------------------------------')print(arr.sum()) # 對所有元素求和
print(arr.std()) # 對所有元素求標準差
print('------------------------------------------')
| 方法 | 說明 |
| sum | 對數組中全部或某軸向的元素求和。零長度的數組的sum為0 |
| mean | 算術平均數。零長度的數組的mean為Nan |
| std, var | 分別為標準差和方差,自由度可調(默認為n) |
| min, max | 最大值和最小值 |
| argmin, argmax | 分別為最大和最小元素的索引 |
| cumsum | 所有元素的累加 |
| cumprod | 所有元素的累積 |
>>函數六:?矩陣乘法
線性代數:(如矩陣乘法、矩陣分解、行列式以及其他方陣數學等)是任何數組庫的重要組成部分unumpy提供了一個用于矩陣乘法?dot()函數
# 矩陣乘法
import numpy as np
x = np.array([[1,2],[3,4]])
y = np.array([[5,6],[7,8]])
print(np.dot(x,y))
print(x.dot(y))
>>其他常用函數
| 函數名 | 用途 |
|---|---|
| diag | 以一維數組的形式返回方陣的對角線(或非對角線)元素,或將一維數組轉換為方陣(非對角線元素為0) |
| dot | 矩陣乘法 |
| trace | 計算對角線元素的和 |
| det | 計算矩陣行列式 |
| eig | 計算方陣的特征值和特征向量 |
| inv | 計算方陣的逆 |
| svd | 計算奇異值分解(SVD) |
| inv | 計算方陣的逆 |
| solve | 解線性方程組Ax=b,其中A為一個方陣 |
| lstsq | 計算Ax=b的最小二乘解 |
>>Numpy保存和導入文件
- ?設置參數sep='? '表述用空白字符來分隔數據
import numpy as np# 文件讀寫
datafile = '../data/home/housing.data'
data = np.fromfile(datafile, sep=' ')
print(data)# 文件保存
np.save('data.npy',data)
總結
以上是生活随笔為你收集整理的机器学习四剑客1——Numpy的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python-opencv 常用工具总结
- 下一篇: 求一个卖衣服好听的微信名字!