做者|Ali Aryan
編譯|VK
來源|Towards Data Sciencepython
隨着機器學習的興起,咱們看到了許多偉大的框架和庫的興起,好比scikit learn、Tensorflow、Pytorch。這些框架使得用戶更容易建立機器學習模型。但仍然須要遵循包括數據準備、建模、評估在內的整個過程。git
數據準備包括數據清理和預處理。建模接受預處理的數據並使用算法來預測結果。評估爲咱們的算法的性能提供了一個度量。因爲這些庫和框架,咱們編寫全部東西的時間減小了,可是咱們仍然須要編寫少許的代碼。github
「機器智能是人類最後一個須要創造的發明。」—尼克·博斯特羅姆算法
在驚人的開源社區的幫助下,這個領域的進步與日俱增,這些社區催生了現有的框架。考慮一個在一行中完成全部上述過程的框架。api
是的,你讀對了,如今你也能夠這麼作了。Libra是一個框架,它一條龍式爲你工做。即便對於非技術人員來講,它也很容易使用。Libra須要最少的平均代碼行數來訓練模型。bash
在這個博客裏,我將給出如何使用Libra的完整指導。我將採起不一樣的數據集爲不一樣的問題,並將向你展現一步一步的方法。網絡
我使用了Kaggle數據集來預測信用卡欺詐。數據已經通過主成分分析,所以與原始數據相比,它如今被簡化爲更小維的數據。app
在解決這個問題時,須要遵循一種系統的方法。通常來講,你將遵循第一段中提到的順序。但有了Libra,你就不用擔憂了。框架
數據集連接:https://www.kaggle.com/mlg-ulb/creditcardfraud機器學習
此數據中的大多數交易在時間上是非欺詐性的(99.83%),而欺詐性交易在數據集中發生的時間(0.17%)。這意味着數據是高度不平衡的。讓咱們看看Libra對數據的預處理和結果。
pip install -U libra
from libra import client
一切都是圍繞client構建的。你能夠對它調用不一樣的查詢,全部的內容都將存儲在對象的models字段下。
咱們在client對象中傳遞文件的位置,並將其命名爲newClient。如今要訪問各類查詢,請參閱文檔。
我用的是決策樹。例如,預測房屋價值中位數,或估計住戶數量。不然,該代碼應與數據集中的列相對應。Libra會自動檢測到目標列,但爲了確保它選擇了正確的列,我已經傳遞了目標列的名稱。
newClient = client('creditcard.csv') newClient.decision_tree_query('Class')
只需兩行代碼,咱們就獲得了大約0.99的分數,這是咱們能獲得的最好成績。若是你檢查其餘人的成功,你會發現只有少數人得到了0.99的準確率,他們花了數小時來預處理數據併爲其編寫代碼。
在這種狀況下,Libra爲你節省了不少時間,給你最好的結果。Libra使用智能預處理,這樣你就不須要本身去預處理數據了。
newClient.analyze()爲全部分類問題建立混淆矩陣和ROC曲線。它還計算召回率,精確度,f1和f2分數。
newClient.analyze()
newClient.info()返回全部鍵,表示爲數據集生成的每種數據類別。
newClient.info()
newClient.model() 返回該模型的字典。它包括從準確度,精確度,召回率,F1分數到全部的預處理技術。對於那些已經瞭解這些概念並可以編寫代碼的人來講,這會更有幫助。非技術用戶沒必要爲此擔憂。
newClient.model()
newClient.model()返回字典,若是要訪問模型,則能夠直接使用newClient.model()['model']
newClient.model()['model']
在colab Notebook使用下面的代碼下載石頭剪刀布數據集。我本能夠直接向你展現使用Libra建立CNN的代碼,可是我想建立一個例子,你能夠本身在colab Notebook中嘗試,以便更好地理解。你不須要擔憂下面的代碼。
!wget --no-check-certificate \ https://storage.googleapis.com/laurencemoroney-blog.appspot.com/rps.zip \ -O /tmp/rps.zip !wget --no-check-certificate \ https://storage.googleapis.com/laurencemoroney-blog.appspot.com/rps-test-set.zip \ -O /tmp/rps-test-set.zip
使用下面的代碼提取下載的文件。
import os import zipfile local_zip = '/tmp/rps.zip' zip_ref = zipfile.ZipFile(local_zip, 'r') zip_ref.extractall('/tmp/') zip_ref.close() local_zip = '/tmp/rps-test-set.zip' zip_ref = zipfile.ZipFile(local_zip, 'r') zip_ref.extractall('/tmp/') zip_ref.close()
咱們用下面的代碼建立文件夾,並將提取的圖像放入其中。
rock_dir = os.path.join('/tmp/rps/rock') paper_dir = os.path.join('/tmp/rps/paper') scissors_dir = os.path.join('/tmp/rps/scissors') print('total training rock images:', len(os.listdir(rock_dir))) print('total training paper images:', len(os.listdir(paper_dir))) print('total training scissors images:', len(os.listdir(scissors_dir))) rock_files = os.listdir(rock_dir) print(rock_files[:10]) paper_files = os.listdir(paper_dir) print(paper_files[:10]) scissors_files = os.listdir(scissors_dir) print(scissors_files[:10])
下圖顯示了有關數據集的信息
使用下面的代碼,你能夠建立CNN。數據將經過縮放、剪切、翻轉和從新縮放自動增長。而後選擇最佳的圖像大小。你還將注意到每一個類中的圖像數量以及與之關聯的類的數量。最後,還要觀察訓練精度和測試精度。
你還能夠在convolutional_query內部傳遞read_mode超參數,在其中你能夠指定讀取模式。容許有三種讀取模式。我將逐一描述它們。默認狀況下,read_mode=distinguisher()自動檢測數據類型。容許的三種讀取模式是:
目錄由「training_set」和「testing_set」文件夾組成,這兩個文件夾都包含帶有圖像的分類文件夾。
目錄由包含圖像的分類文件夾組成。
目錄由圖像文件夾和包含圖像列的CSV文件組成。
newClient = client('/tmp/rps') newClient.convolutional_query("Please classify my images")
我使用垃圾郵件分類數據集來解決這個問題。
連接:https://www.kaggle.com/team-ai/spam-text-message-classification
new_client = client('SPAM text message 20170820 - Data.csv') new_client.text_classification_query('sentiment') new_client.classify_text('new text to classify')
new_client.classify_text()將對其中輸入的文本進行分類。在上面的輸出中,你能夠看到它將個人文本分類爲「ham」。
我使用商場客戶劃分數據來解決這個問題:https://www.kaggle.com/vjchoudhary7/customer-segmentation-tutorial-in-python
Libra將建立一個K均值聚類模型,並將肯定最佳簇中心,優化準確度,以及最佳聚類數。
在本節中,我將使用神經網絡查詢進行分類。爲此,我使用了一個私人數據集來預測大腦信號的行爲。讓咱們檢查一下它在那個數據集上的執行狀況。
new_client = client('Mood_classification.csv') new_client.neural_network_query('Predict the behavior')
從上面的代碼中,你能夠注意到模型使用的初始層數是3。而後,它還測試了不一樣層數的精度,這些層數根據前一層的性能而變化。
它能夠預測找到的最佳層數以及訓練和測試的準確性。看來我須要爲個人數據集收集更多的數據。
你能夠用new_client.model()[‘model’]訪問模型,並可使用Keras的summary()函數獲取神經網絡模型的摘要。
new_client.model()['model'].summary()
Libra是一個很是有趣的框架,天天都在進步。這個框架爲咱們提供了數據科學領域發展速度的概述,也讓咱們看到了這個領域中可能存在的變化類型。他們還爲現有的數據科學家添加了一些功能,以修改現有的神經網絡,並在指定的索引處添加相似LSTM的層。我對這個框架帶來的概念感到興奮。
[1] Libra, Documentation(2020), http://libradocs.github.io/
歡迎關注磐創AI博客站:
http://panchuang.net/
sklearn機器學習中文官方文檔:
http://sklearn123.com/
歡迎關注磐創博客資源彙總站:
http://docs.panchuang.net/