99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀為什么要選擇Python語言實現(xiàn)機器學(xué)習(xí)算法
為什么要選擇Python語言實現(xiàn)機器學(xué)習(xí)算法
2016-11-26
收藏

為什么要選擇Python語言實現(xiàn)機器學(xué)習(xí)算法

基于以下三個原因,我們選擇Python作為實現(xiàn)機器學(xué)習(xí)算法的編程語言:(1) Python的語法清晰;(2) 易于操作純文本文件;(3) 使用廣泛,存在大量的開發(fā)文檔。

可執(zhí)行偽代碼

Python具有清晰的語法結(jié)構(gòu),大家也把它稱作可執(zhí)行偽代碼(executable pseudo-code)。默認(rèn)安裝的Python開發(fā)環(huán)境已經(jīng)附帶了很多高級數(shù)據(jù)類型,如列表、元組、字典、集合、隊列等,無需進(jìn)一步編程就可以使用這些數(shù)據(jù)類型的操作。使用這些數(shù)據(jù)類型使得實現(xiàn)抽象的數(shù)學(xué)概念非常簡單。此外,讀者還可以使用自己熟悉的編程風(fēng)格,如面向?qū)ο缶幊?、面向過程編程、或者函數(shù)式編程。不熟悉Python的讀者可以參閱附錄A,該附錄詳細(xì)介紹了Python語言、Python使用的數(shù)據(jù)類型以及安裝指南。

Python語言處理和操作文本文件非常簡單,非常易于處理非數(shù)值型數(shù)據(jù)。Python語言提供了豐富的正則表達(dá)式函數(shù)以及很多訪問Web頁面的函數(shù)庫,使得從HTML中提取數(shù)據(jù)變得非常簡單直觀。

Python比較流行

Python語言使用廣泛,代碼范例也很多,便于讀者快速學(xué)習(xí)和掌握。此外,在開發(fā)實際應(yīng)用程序時,也可以利用豐富的模塊庫縮短開發(fā)周期。

在科學(xué)和金融領(lǐng)域,Python語言得到了廣泛應(yīng)用。SciPy和NumPy等許多科學(xué)函數(shù)庫都實現(xiàn)了向量和矩陣操作,這些函數(shù)庫增加了代碼的可讀性,學(xué)過線性代數(shù)的人都可以看懂代碼的實際功能。另外,科學(xué)函數(shù)庫SciPy和NumPy使用底層語言(C和Fortran)編寫,提高了相關(guān)應(yīng)用程序的計算性能。本書將大量使用Python的NumPy。

Python的科學(xué)工具可以與繪圖工具M(jìn)atplotlib協(xié)同工作。Matplotlib可以繪制2D、3D圖形,也可以處理科學(xué)研究中經(jīng)常使用到的圖形,所以本書也將大量使用Matplotlib。

Python開發(fā)環(huán)境還提供了交互式shell環(huán)境,允許用戶開發(fā)程序時查看和檢測程序內(nèi)容。

Python開發(fā)環(huán)境將來還會集成Pylab模塊,它將NumPy、SciPy和Matplotlib合并為一個開發(fā)環(huán)境。在本書寫作時,Pylab還沒有并入Python環(huán)境,但是不遠(yuǎn)的將來我們肯定可以在Python開發(fā)環(huán)境找到它。

Python語言的特色

諸如MATLAB和Mathematica等高級程序語言也允許用戶執(zhí)行矩陣操作,MATLAB甚至還有許多內(nèi)嵌的特征可以輕松地構(gòu)造機器學(xué)習(xí)應(yīng)用,而且MATLAB的運算速度也很快。然而MATLAB的不足之處是軟件費用太高,單個軟件授權(quán)就要花費數(shù)千美元。雖然也有適合MATLAB的第三方插件,但是沒有一個有影響力的大型開源項目。

Java和C等強類型程序設(shè)計語言也有矩陣數(shù)學(xué)庫,然而對于這些程序設(shè)計語言來說,最大的問題是即使完成簡單的操作也要編寫大量的代碼。程序員首先需要定義變量的類型,對于Java來說,每次封裝屬性時還需要實現(xiàn)getter和setter方法。另外還要記著實現(xiàn)子類,即使并不想使用子類,也必須實現(xiàn)子類方法。為了完成一個簡單的工作,我們必須花費大量時間編寫了很多無用冗長的代碼。Python語言則與Java和C完全不同,它清晰簡練,而且易于理解,即使不是編程人員也能夠理解程序的含義,而Java和C對于非編程人員則像天書一樣難于理解。

所有人在小學(xué)二年級已經(jīng)學(xué)會了寫作,然而大多數(shù)人必須從事其他更重要的工作。
——鮑比·奈特

也許某一天,我們可以在這句話中將“寫作”替代為“編寫代碼”,雖然有些人對于編寫代碼很感興趣,但是對于大多數(shù)人來說,編程僅是完成其他任務(wù)的工具而已。Python語言是高級編程語言,我們可以花費更多的時間處理數(shù)據(jù)的內(nèi)在含義,而無須花費太多精力解決計算機如何得到數(shù)據(jù)結(jié)果。Python語言使得我們很容易表達(dá)自己的目的。

Python語言的缺點

Python語言唯一的不足是性能問題。Python程序運行的效率不如Java或者C代碼高,但是我們可以使用Python調(diào)用C編譯的代碼。這樣,我們就可以同時利用C和Python的優(yōu)點,逐步地開發(fā)機器學(xué)習(xí)應(yīng)用程序。我們可以首先使用Python編寫實驗程序,如果進(jìn)一步想要在產(chǎn)品中實現(xiàn)機器學(xué)習(xí),轉(zhuǎn)換成C代碼也不困難。如果程序是按照模塊化原則組織的,我們可以先構(gòu)造可運行的Python程序,然后再逐步使用C代碼替換核心代碼以改進(jìn)程序的性能。C++ Boost庫就適合完成這個任務(wù),其他類似于Cython和PyPy的工具也可以編寫強類型的Python代碼,改進(jìn)一般Python程序的性能。

如果程序的算法或者思想有缺陷,則無論程序的性能如何,都無法得到正確的結(jié)果。如果解決問題的思想存在問題,那么單純通過提高程序的運行效率,擴展用戶規(guī)模都無法解決這個核心問題。從這個角度來看,Python快速實現(xiàn)系統(tǒng)的優(yōu)勢就更加明顯了,我們可以快速地檢驗算法或者思想是否正確,如果需要,再進(jìn)一步優(yōu)化代碼。


數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }