iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 12
0
AI & Data

AI&Machine Learning系列 第 12

(不專業的AI介紹) 機器學習-Machine-Learning ->機器與人類,程式的差異!

  • 分享至 

  • xImage
  •  

大家好~~今日會為各位介紹程式的部分,介紹如果不利用現在很夯的程式模組那我們與模組真正的機器學習差異在哪裡呢?本人就以 python 為主,python 所做的機器學習會使用 Scikit-learning模組,相信大家都知道這個模組,如果沒聽過,那一定有聽過KNN吧,這個就是在分辨一個資料源上的問題。

import Sklearn
import numpy as np
import matplotlib.pyplot as plt

以上大家所看到的是 Sklearn 機器學習主要模組,numpy 產生所需要的資料(因為示範用所以會採用此模組來產生資料),matplotlib 此來做圖表概念,這個跟我之前介紹的 pandas 非常像,但是比 pandas 所能產生的還要豐富,其中我們會用到 Sklearn 的裡面方法 -> neighbors 本人都會把它稱為鄰居,因為就跟英文非常相像,那這個 neighbors 可以幫我們做到甚麼呢? https://zhuanlan.zhihu.com/p/23191325 這份網站中有充分的對於 SKlearn的基礎介紹以及對於 neighbors 來做個基礎介紹,本篇也會針對上面網址來做相關介紹與敘述。

X = np.random.normal(40,8,200)
y = np.random.normal(6,0.3,200)
neighbors.KNeighborsClassifier(n_neighbors = ?)
neighbors.KNeighborsClassifier.fit(X,y)
neighbors.kNeighborsClassifier.predict(X)
neighbors.KNeighborsClassifier.score(X,y)

對於上面的程式碼非常簡短的來跟各位呈現這些方法,最上面那兩條 np.random.normal() 是用來產生亂數資料,因為本次沒有相關可以用的題材,所以姑且使用這個亂數資料來做敘述,那產生資料完畢需要針對這些資料進行KNN分析,所謂的KNN,就是取一個近似值的意思,寫上去的數字如網站所提,就像一個距離的概念,與他鄰近的部分他就會判定這個數字,之所以這樣也是需要龐大資料才可以確保我們所給的東西的正確性,所以我們在亂數中不外乎產生 200 個來做樣本,之後 KNN 結束完畢就進行 fit 耦合的部分,簡單地把它當作就像是給 Sklearn 做事情一樣,將這個程式碼叫出就代表要給 sklearn 正式做事情了,他有了資料以後他就可以做 predict 的動作(預測),會預測到甚麼呢,基本上就是你的X數值對上一個,無可取代的 Y 值,概念其實就很像,y=ax+b,因為這個式子就是在針對一個 X 只會有一個 Y的概念,再來後面就是一個 Score 的功能,這個功能就是在表達你做的這件事情,可信度為多少,因為她出來的數字是一個 小數點的數字,也就是百分之幾的意思,這個意思非常可以看出這件事情可不可靠,當然單看數字是這樣,但是如果內部的程式有誤,那這個數字不一定就可以拿來當參考值了。

labels = [1]*200 + [2]*200 + [3]*200
clf.fit(xy_normalized,labels)
xy_test_normalized = list(zip(np.concatenate((x1_test,x2_test,x3_test))/x_diff,
                     np.concatenate((y1_test,y2_test,y3_test))/y_diff))
plt.scatter(x1,y1,c='b',marker= 's',s=50,alpha = 0.8)
plt.scatter(x2,y2,c='r',marker= '^',s=50,alpha = 0.8)
plt.scatter(x3,y3,c='g',s=50,alpha = 0.8)
plt.axis((10,70,1,7))

這裡上面有個 labels 的項目,他是在產生這些資料的類別,因為剛剛說過沒有正式資料,所以全部以這些亂數為主,其中這三個就是他們的類別,但是看他寫大家可能會有問題說,為甚麼他的資料會知道一個對一個呢,或者是預測的點從哪裡看得,底下那條 clf.fit(xy_normalized,labels),將 xy_normalized 與 labels 做一個互相搭配,如果這過程有人不懂的人可以看一下上方網址,可以知道這個程式碼的由來,匹配完畢之後事實上在一個 X 與 Y軸上會產生許多資料,他們就會各自站到一個區塊,後續做預測出來時,就都會已經分配好了,再來下面的,xy_test_normalized,這裡是為了要將整個資料統整化,因為我們在做資料時,其實很常會二維陣列 一維陣列,但這段就是將二維的東西一起變成一維還可以排在一起,後面的 plt.scatter 就是做畫圖動作 c 就是 color,s 是取樣的組數,alpha 是對於圖的透明度,再來最後 plt.axis 就是設定 X 軸 跟 Y 軸 最大最小範圍。

這就是簡單的機器學習狀態,以現在來說很短,打開那個網站之後會發現這個程式碼將近有100多行,說小不小,說大也不大,但是就有一定深度,很值得新手真的去看看,假設我們都沒用這種模組,那換做我們人來做機器學習這些方法是該怎樣的做法呢。

X = np.random.normal(10,1,100)
Y = np.random.normal(5,0.1,100)

W = []
Z = []

for i in X:
    if X[i] > 11:
        W = X[i]
    else:
        Z = X[i]

print(W)
print(Z)

以上的作法,是類似於我們一般作法,但是不是每個人都這樣,大部分的人一定都經歷過,如果我們今天要把一大筆資料抓出來,那就要有陣列以及 if 跟 迴圈 來判別,判斷完之後後續看要做平均值 或者是 正規化都可以,但是重點是說做出來的值,不一定完全是正確的,就算出來只是一個百分比,也會覺得這種數值是不是要思考一下,有可能不是這個百分比所給的結果。

人類跟機器最大的差異點是,機器如果有足夠的資料量,所判別出來的方式可以透過無數個方法來驗證,可以讓證據更加肯定,但是因為人類畢竟有極限,有時一件事情無法完全就確定,所以會反反覆覆做好幾次。

那不知道這樣大家對機器與人類的方面有沒有更加了解,也謝謝各位看完,以上為不專業的AI介紹,那我們下篇見

參考資料:https://zhuanlan.zhihu.com/p/23191325
     https://blog.techbridge.cc/2017/11/24/python-data-science-and-machine-learning-scikit-learn-basic-tutorial/
  https://zwindr.blogspot.com/2017/04/python-matplotlib.html


上一篇
(不專業的AI介紹) 機器學習-Machine-Learning 基礎介紹 Day11
下一篇
(不專業的AI介紹) 機器學習-Machine-Learning -> 相關功能介紹(Regression) Day 13
系列文
AI&Machine Learning30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言