本教程的知識點為:機器學(xué)習(常用科學(xué)計算庫的使用)基礎(chǔ)定位 機器學(xué)習概述 機器學(xué)習概述 1.5 機器學(xué)習算法分類 1 監(jiān)督學(xué)習 機器學(xué)習概述 1.7 Azure機器學(xué)習模型搭建實驗 Azure平臺簡介 Matplotlib 3.2 基礎(chǔ)繪圖功能 — 以折線圖為例 1 完善原始折線圖 — 給圖形添加輔助功能 Matplotlib 3.3 常見圖形繪制 1 常見圖形種類及意義 Numpy 4.2 N維數(shù)組-ndarray 1 ndarray的屬性 Numpy 4.4 ndarray運算 問題 Pandas 5.1Pandas介紹 1 Pandas介紹 Pandas 5.3 基本數(shù)據(jù)操作 1 索引操作 Pandas 5.6 文件讀取與存儲 1 CSV Pandas 5.8 高級處理-數(shù)據(jù)離散化 1 為什么要離散化 Pandas 5.12 案例 1 需求
完整筆記資料代碼:https://gitee.com/yinuo112/AI/tree/master/機器學(xué)習/嘿馬機器學(xué)習(科學(xué)計算庫)/note.md
感興趣的小伙伴可以自取哦~
全套教程部分目錄:
部分文件圖片:
Numpy
學(xué)習目標
- 了解Numpy運算速度上的優(yōu)勢
- 知道數(shù)組的屬性稚新,形狀、類型
- 應(yīng)用Numpy實現(xiàn)數(shù)組的基本操作
- 應(yīng)用隨機數(shù)組的創(chuàng)建實現(xiàn)正態(tài)分布應(yīng)用
- 應(yīng)用Numpy實現(xiàn)數(shù)組的邏輯運算
- 應(yīng)用Numpy實現(xiàn)數(shù)組的統(tǒng)計運算
- 應(yīng)用Numpy實現(xiàn)數(shù)組之間的運算
4.4 ndarray運算
學(xué)習目標
-
目標
- 應(yīng)用數(shù)組的通用判斷函數(shù)
- 應(yīng)用np.where實現(xiàn)數(shù)組的三元運算
問題
如果想要操作符合某一條件的數(shù)據(jù)舶治,應(yīng)該怎么做扮惦?
1 邏輯運算
# 生成10名同學(xué)源梭,5門功課的數(shù)據(jù)
>>> score = np.random.randint(40, 100, (10, 5))
# 取出最后4名同學(xué)的成績粪滤,用于邏輯判斷
>>> test_score = score[6:, 0:5]
# 邏輯判斷, 如果成績大于60就標記為True 否則為False
>>> test_score > 60
array([[ True, True, True, False, True],
[ True, True, True, False, True],
[ True, True, False, False, True],
[False, True, True, True, True]])
# BOOL賦值, 將滿足條件的設(shè)置為指定的值-布爾索引
>>> test_score[test_score > 60] = 1
>>> test_score
array([[ 1, 1, 1, 52, 1],
[ 1, 1, 1, 59, 1],
[ 1, 1, 44, 44, 1],
[59, 1, 1, 1, 1]])
2 通用判斷函數(shù)
- np.all()
# 判斷前兩名同學(xué)的成績[0:2, :]是否全及格
>>> np.all(score[0:2, :] > 60)
False
- np.any()
# 判斷前兩名同學(xué)的成績[0:2, :]是否有大于90分的
>>> np.any(score[0:2, :] > 80)
True
3 np.where(三元運算符)
通過使用np.where能夠進行更加復(fù)雜的運算
- np.where()
# 判斷前四名學(xué)生,前四門中宁舰,成績中大于60的置為1,否則為0
temp = score[:4, :4]
np.where(temp > 60, 1, 0)
- 復(fù)合邏輯需要結(jié)合np.logical_and和np.logical_or使用
# 判斷前四名學(xué)生,前四門中蓖议,成績中大于60且小于90的換為1虏杰,否則為0
np.where(np.logical_and(temp > 60, temp < 90), 1, 0)
# 判斷前四名學(xué)生,前四門中,成績中大于90或小于60的換為1勒虾,否則為0
np.where(np.logical_or(temp > 90, temp < 60), 1, 0)
4 統(tǒng)計運算
如果想要知道學(xué)生成績最大的分數(shù)纺阔,或者做小分數(shù)應(yīng)該怎么做?
4.1 統(tǒng)計指標
在數(shù)據(jù)挖掘/機器學(xué)習領(lǐng)域修然,統(tǒng)計指標的值也是我們分析問題的一種方式笛钝。常用的指標如下:
-
min(a, axis)
- Return the minimum of an array or minimum along an axis.
-
max(a, axis])
- Return the maximum of an array or maximum along an axis.
-
median(a, axis)
- Compute the median along the specified axis.
-
mean(a, axis, dtype)
- Compute the arithmetic mean along the specified axis.
-
std(a, axis, dtype)
- Compute the standard deviation along the specified axis.
-
var(a, axis, dtype)
- Compute the variance along the specified axis.
4.2 案例:學(xué)生成績統(tǒng)計運算
進行統(tǒng)計的時候质况,axis 軸的取值并不一定,Numpy中不同的API軸的值都不一樣玻靡,在這里结榄,axis 0代表列, axis 1代表行去進行統(tǒng)計
# 接下來對于前四名學(xué)生,進行一些統(tǒng)計運算
# 指定列 去統(tǒng)計
temp = score[:4, 0:5]
print("前四名學(xué)生,各科成績的最大分:{}".format(np.max(temp, axis=0)))
print("前四名學(xué)生,各科成績的最小分:{}".format(np.min(temp, axis=0)))
print("前四名學(xué)生,各科成績波動情況:{}".format(np.std(temp, axis=0)))
print("前四名學(xué)生,各科成績的平均分:{}".format(np.mean(temp, axis=0)))
結(jié)果:
前四名學(xué)生,各科成績的最大分:[96 97 72 98 89]
前四名學(xué)生,各科成績的最小分:[55 57 45 76 77]
前四名學(xué)生,各科成績波動情況:[16.25576821 14.92271758 10.40432602 8.0311892 4.32290412]
前四名學(xué)生,各科成績的平均分:[78.5 75.75 62.5 85. 82.25]
如果需要統(tǒng)計出某科最高分對應(yīng)的是哪個同學(xué)?
- np.argmax(temp, axis=)
- np.argmin(temp, axis=)
print("前四名學(xué)生囤捻,各科成績最高分對應(yīng)的學(xué)生下標:{}".format(np.argmax(temp, axis=0)))
結(jié)果:
前四名學(xué)生臼朗,各科成績最高分對應(yīng)的學(xué)生下標:[0 2 0 0 1]
5 小結(jié)
-
邏輯運算【知道】
- 直接進行大于,小于的判斷
- 合適之后,可以直接進行賦值
-
通用判斷函數(shù)【知道】
- np.all()
- np.any()
-
統(tǒng)計運算【掌握】
- np.max()
- np.min()
- np.median()
- np.mean()
- np.std()
- np.var()
- np.argmax(axis=) — 最大元素對應(yīng)的下標
- np.argmin(axis=) — 最小元素對應(yīng)的下標
4.5 數(shù)組間運算
學(xué)習目標
-
目標
- 知道數(shù)組與數(shù)之間的運算
- 知道數(shù)組與數(shù)組之間的運算
- 說明數(shù)組間運算的廣播機制
1 數(shù)組與數(shù)的運算
arr = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]])
arr + 1
arr / 2
# 可以對比python列表的運算,看出區(qū)別
a = [1, 2, 3, 4, 5]
a * 3
2 數(shù)組與數(shù)組的運算
arr1 = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]])
arr2 = np.array([[1, 2, 3, 4], [3, 4, 5, 6]])
上面這個能進行運算嗎蝎土,結(jié)果是不行的视哑!
2.1 廣播機制
數(shù)組在進行矢量化運算時,要求數(shù)組的形狀是相等的誊涯。當形狀不相等的數(shù)組執(zhí)行算術(shù)運算的時候挡毅,就會出現(xiàn)廣播機制,該機制會對數(shù)組進行擴展暴构,使數(shù)組的shape屬性值一樣跪呈,這樣,就可以進行矢量化運算了取逾。下面通過一個例子進行說明:
arr1 = np.array([[0],[1],[2],[3]])
arr1.shape
# (4, 1)
arr2 = np.array([1,2,3])
arr2.shape
# (3,)
arr1+arr2
# 結(jié)果是:
array([[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
[4, 5, 6]])
上述代碼中耗绿,數(shù)組arr1是4行1列,arr2是1行3列菌赖。這兩個數(shù)組要進行相加缭乘,按照廣播機制會對數(shù)組arr1和arr2都進行擴展,使得數(shù)組arr1和arr2都變成4行3列琉用。
下面通過一張圖來描述廣播機制擴展數(shù)組的過程:
這句話乃是理解廣播的核心堕绩。廣播主要發(fā)生在兩種情況,一種是兩個數(shù)組的維數(shù)不相等邑时,但是它們的后緣維度的軸長相符奴紧,另外一種是有一方的長度為1。
廣播機制實現(xiàn)了時兩個或兩個以上數(shù)組的運算晶丘,即使這些數(shù)組的shape不是完全相同的黍氮,只需要滿足如下任意一個條件即可。
- 如果兩個數(shù)組的后緣維度(trailing dimension浅浮,即從末尾開始算起的維度)的軸長度相符沫浆,
- 或其中的一方的長度為1。
廣播會在缺失和(或)長度為1的維度上進行滚秩。
廣播機制需要擴展維度小的數(shù)組专执,使得它與維度最大的數(shù)組的shape值相同,以便使用元素級函數(shù)或者運算符進行運算郁油。
如果是下面這樣本股,則不匹配:
A (1d array): 10
B (1d array): 12
A (2d array): 2 x 1
B (3d array): 8 x 4 x 3
思考:下面兩個ndarray是否能夠進行運算攀痊?
arr1 = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]])
arr2 = np.array([[1], [3]])
3 小結(jié)
-
數(shù)組運算,滿足廣播機制,就OK【知道】
- 1.維度相等
- 2.shape(其中對應(yīng)的地方為1,也是可以的)
Numpy
學(xué)習目標
- 了解Numpy運算速度上的優(yōu)勢
- 知道數(shù)組的屬性,形狀拄显、類型
- 應(yīng)用Numpy實現(xiàn)數(shù)組的基本操作
- 應(yīng)用隨機數(shù)組的創(chuàng)建實現(xiàn)正態(tài)分布應(yīng)用
- 應(yīng)用Numpy實現(xiàn)數(shù)組的邏輯運算
- 應(yīng)用Numpy實現(xiàn)數(shù)組的統(tǒng)計運算
- 應(yīng)用Numpy實現(xiàn)數(shù)組之間的運算
4.6 數(shù)學(xué):矩陣
學(xué)習目標
-
目標
- 知道什么是矩陣和向量
- 知道矩陣的加法,乘法
- 知道矩陣的逆和轉(zhuǎn)置
- 應(yīng)用np.matmul苟径、np.dot實現(xiàn)矩陣運算
1 矩陣和向量
1.1 矩陣
矩陣,英文matrix躬审,和array的區(qū)別矩陣必須是2維的棘街,但是array可以是多維的。
如圖:這個是 3×2 矩陣盒件,即 3 行 2 列蹬碧,如 m 為行舱禽,n 為列炒刁,那么 m×n 即 3×2<span class="katex-display"><span class="katex"><span class="katex-mathml"><math><semantics><mrow><mrow><mo fence="true">[</mo><mtable><mtr><mtd><mrow><mn>1</mn></mrow></mtd><mtd><mrow><mn>2</mn></mrow></mtd></mtr><mtr><mtd><mrow><mn>3</mn></mrow></mtd><mtd><mrow><mn>4</mn></mrow></mtd></mtr><mtr><mtd><mrow><mn>5</mn></mrow></mtd><mtd><mrow><mn>6</mn></mrow></mtd></mtr></mtable><mo fence="true">]</mo></mrow></mrow><annotation encoding="application/x-tex">\left[ \begin{matrix} 1 & 2 \ 3 & 4 \ 5 & 6 \end{matrix} \right]</annotation></semantics></math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:2.05002em;"></span><span class="strut bottom" style="height:3.60004em;vertical-align:-1.55002em;"></span><span class="base displaystyle textstyle uncramped"><span class="minner displaystyle textstyle uncramped"><span class="mopen style-wrap reset-textstyle textstyle uncramped"><span class="delimsizing mult"><span class="vlist"><span style="top:0.9049999999999999em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;"></span></span><span class="delimsizinginner delim-size4"><span>?</span></span></span><span style="top:-0.89502em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;"></span></span><span class="delimsizinginner delim-size4"><span>?</span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;"></span></span></span></span></span></span><span class="mord"><s