<label id="jgr5k"></label>
    <legend id="jgr5k"><track id="jgr5k"></track></legend>

    <sub id="jgr5k"></sub>
  1. <u id="jgr5k"></u>
      久草国产视频,91资源总站,在线免费看AV,丁香婷婷社区,久久精品99久久久久久久久,色天使av,无码探花,香蕉av在线
      您正在使用IE低版瀏覽器,為了您的雷峰網賬號安全和更好的產品體驗,強烈建議使用更快更安全的瀏覽器
      此為臨時鏈接,僅用于文章預覽,將在時失效
      人工智能開發者 正文
      發私信給AI研習社
      發送

      0

      貸還是不貸:如何用 Python 和機器學習幫你決策?

      本文作者: AI研習社 2017-07-04 11:19
      導語:用機器學習幫你決策貸款。

      雷鋒網按:本文作者王樹義,原載于微信公眾號玉樹芝蘭(nkwangshuyi),雷鋒網經授權發布。

      耳聞目睹了機器學習的諸般神奇,有沒有沖動打算自己嘗試一下?本文我們通過一個貸款風險評估的案例,用最通俗的語言向你介紹機器學習的基礎招式,一步步幫助你用Python完成自己的第一個機器學習項目。試過之后你會發現,機器學習真的不難。

      貸還是不貸:如何用 Python 和機器學習幫你決策?

      任務

      祝賀你,成功進入了一家金融公司實習。

      第一天上班,你還處在興奮中。這時主管把你叫過去,給你看了一個文件。文件內容是這個樣子的:

      貸還是不貸:如何用 Python 和機器學習幫你決策?

      主管說這是公司寶貴的數據資產。囑咐你認真閱讀,并且從數字中找出規律,以便做出明智的貸款決策。

      每一行數據,都代表了之前的一次貸款信息。你琢磨了很久,終于弄明白了每一列究竟代表什么意思:

      • grade:貸款級別

      • sub_grade: 貸款細分級別

      • short_emp:一年以內短期雇傭

      • emp_length_num:受雇年限

      • home_ownership:居住狀態(自有,按揭,租住)

      • dti:貸款占收入比例

      • purpose:貸款用途

      • term:貸款周期

      • last_delinq_none:貸款申請人是否有不良記錄

      • last_major_derog_none:貸款申請人是否有還款逾期90天以上記錄

      • revol_util:透支額度占信用比例

      • total_rec_late_fee:逾期罰款總額

      • safe_loans:貸款是否安全

      最后一列,記錄了這筆貸款是否按期收回。拿著以前的這些寶貴經驗教訓,主管希望你能夠總結出貸款是否安全的規律。在面對新的貸款申請時,從容和正確應對。

      主管讓你找的這種規律,可以用決策樹來表達。

      決策

      我們來說說什么是決策樹。決策樹長得就像這個樣子:

      貸還是不貸:如何用 Python 和機器學習幫你決策?

      做決策的時候,你需要從最上面的節點出發。在每一個分支上,都有一個判斷條件。滿足條件,往左走;不滿足,向右走。一旦走到了樹的邊緣,一項決策就完成了。

      例如你走在街上,遇見鄰居老張。你熱情地打招呼:

      “老張,吃了嗎?”

      好了,這里就是個分支。老張的回答,將決定你的決策走向,即后面你將說什么。

      第一種情況。

      老張:吃過了。

      你:要不來我家再吃點兒?

      第二種情況。

      老張:還沒吃。

      你:那趕緊回家吃去吧。再見!

      ……

      具體到貸款這個實例,你需要依次分析申請人的各項指標,然后判定這個貸款申請是否安全,以做出是否貸款給他的決策。把這個流程寫下來,就是一棵決策樹。

      作為一名金融界新兵,你原本也是抱著積極開放的心態,希望多嘗試一下的。但是當你把數據表下拉到最后一行的時候,你發現記錄居然有46509條!

      貸還是不貸:如何用 Python 和機器學習幫你決策?

      你估算了一下自己的閱讀速度、耐心和認知負荷能力,覺得這個任務屬于Mission Impossible(不可能完成),于是開始默默地收拾東西,打算找主管道個別,辭職不干了。

      且慢,你不必如此沮喪。因為科技的發展,已經把一項黑魔法放在了你的手邊,隨時供你取用。它的名字,叫做機器學習。

      學習

      什么叫機器學習?

      從前,人是“操作”計算機的。一項任務如何完成,人心里是完全有數的。人把一條條指令下達給電腦,電腦負責傻呵呵地干完,收工。

      后來人們發現,對有些任務,人根本就不知道該怎么辦。

      前些日子的新聞里,你知道Alpha Go和柯潔下圍棋。柯潔不僅輸了棋,還哭了。

      貸還是不貸:如何用 Python 和機器學習幫你決策?

      可是制造Alpha Go的那幫人,當真知道怎樣下棋,才能贏過柯潔嗎?你就是讓他們放棄體育家精神,攢雞毛湊撣子一起上,跟柯潔下棋……你估計哭的是誰?

      一幫連自己下棋,都下不贏柯潔的人,又是如何制作出電腦軟件,戰勝了人類圍棋界的“最強大腦”呢?

      答案正是機器學習。

      你自己都不知道如何完成的任務,自然也不可能告訴機器“第一步這么干,第二步那么辦”,或者“如果出現A情況,打開第一個錦囊;如果出現B情況,打開第二個錦囊”。

      機器學習的關鍵,不在于人類的經驗和智慧,而在于數據。

      本文我們接觸到的,是最為基礎的監督式學習(supervised learning)。監督式學習利用的數據,是機器最喜歡的。這些數據的特點,是都被打了標記。

      主管給你的這個貸款記錄數據集,就是打了標記的。針對每個貸款案例,后面都有“是否安全”的標記。1代表了安全,-1代表了不安全。

      機器看到一條數據,又看到了數據上的標記,于是有了一個假設。

      然后你再讓它看一條數據,它就會強化或者修改原先的假設。

      這就是學習的過程:建立假設——收到反饋——修正假設。在這個過程中,機器通過迭代,不斷刷新自己的認知。

      這讓我想起了經典相聲段子“蛤蟆鼓”里面的對話片段。

      甲:那我問問你,蛤蟆你看見過吧?

      乙:誰沒見過蛤蟆呀。

      甲:你說為什么它那么小的動物,叫喚出來的聲音會那么大呢?

      乙:那是因為它嘴大肚兒大脖子粗,叫喚出來的聲音必然大。萬物都是一個理。

      甲:我家的字紙簍子也是嘴大脖子粗,為什么它不叫喚哪?

      乙:字紙簍是死物,那是竹子編的,不但不叫,連響都響不了。

      甲:吹的笙也是竹子的,怎么響呢?

      乙:雖然竹子編的,因為它有窟窿有眼兒,有眼兒的就響。

      甲:我家篩米的篩子盡是窟窿眼兒,怎么吹不響?

      這里相聲演員乙,就一直試圖建立可以推廣的假設。可惜,甲總是用新的例證摧毀乙的三觀。

      在四處碰壁后,可憐的機器跌跌撞撞地成長。看了許許多多的數據后,電腦逐漸有了自己對一些事情判斷的想法。我們把這種想法叫做模型。

      之后,你就可以用模型去輔助自己做出明智的判斷了。

      下面我們開始動手實踐。用Python做個決策樹出來,輔助我們判斷貸款風險。

      準備

      使用Python和相關軟件包,你需要先安裝Anaconda套裝。詳細的流程步驟請參考《 如何用Python做詞云 》一文。

      主管給你展示的這份貸款數據文件,請從這里下載:

      http://t.cn/RoDJeNH

      文件的擴展名是csv,你可以用Excel打開,看看是否下載正確。

      貸還是不貸:如何用 Python 和機器學習幫你決策?

      如果一切正常,請把它移動到咱們的工作目錄demo里面。

      到你的系統“終端”(macOS, Linux)或者“命令提示符”(Windows)下,進入我們的工作目錄demo,執行以下命令。

      pip install -U PIL

      運行環境配置完畢。

      在終端或者命令提示符下鍵入:

      jupyter notebook

      貸還是不貸:如何用 Python 和機器學習幫你決策?

      Jupyter Notebook已經正確運行。下面我們就可以正式編寫代碼了。

      代碼

      首先,我們新建一個Python 2筆記本,起名叫做loans-tree。

      貸還是不貸:如何用 Python 和機器學習幫你決策?

      為了讓Python能夠高效率處理表格數據,我們使用一個非常優秀的數據處理框架Pandas。

      import pandas as pd

      然后我們把loans.csv里面的內容全部讀取出來,存入到一個叫做df的變量里面。

      df = pd.read_csv('loans.csv')

      我們看看df這個數據框的前幾行,以確認數據讀取無誤。

      df.head()

      貸還是不貸:如何用 Python 和機器學習幫你決策?

      因為表格列數較多,屏幕上顯示不完整,我們向右拖動表格,看表格最右邊幾列是否也正確讀取。

      貸還是不貸:如何用 Python 和機器學習幫你決策?

      經驗證,數據所有列都已讀入。

      統計一下總行數,看是不是所有行也都完整讀取進來了。

      df.shape

      運行結果如下:

      (46508, 13)

      行列數量都正確,數據讀取無誤。

      你應該還記得吧,每一條數據的最后一列 safe_loans 是個標記,告訴我們之前發放的這筆貸款是否安全。我們把這種標記叫做目標(target),把前面的所有列叫做“特征”(features)。這些術語你現在記不住沒關系,因為以后會反復遇到。自然就會強化記憶。

      下面我們就分別把特征和目標提取出來。依照機器學習領域的習慣,我們把特征叫做X,目標叫做y。

      X = df.drop('safe_loans', axis=1)

      y = df.safe_loans

      我們看一下特征數據X的形狀:

      X.shape

      運行結果為:

      (46508, 12)

      除了最后一列,其他行列都在。符合我們的預期。我們再看看“目標”列。

      y.shape

      執行后顯示如下結果:

      (46508,)

      這里的逗號后面沒有數字,指的是只有1列。

      我們來看看X的前幾列。

      X.head()

      運行結果為:

      貸還是不貸:如何用 Python 和機器學習幫你決策?

      注意這里有一個問題。Python下做決策樹的時候,每一個特征都應該是數值(整型或者實數)類型的。但是我們一眼就可以看出,grade, sub_grade, home_ownership等列的取值都是類別(categorical)型。所以,必須經過一步轉換,把這些類別都映射成為某個數值,才能進行下面的步驟。

      那我們就開始映射吧:

      from sklearn.preprocessing import LabelEncoder

      from collections import defaultdict

      d = defaultdict(LabelEncoder)

      X_trans = X.apply(lambda x: d[x.name].fit_transform(x))

      X_trans.head()

      運行結果是這樣的:

      貸還是不貸:如何用 Python 和機器學習幫你決策?

      這里,我們使用了LabelEncoder函數,成功地把類別變成了數值。小測驗:在grade列下面,B被映射成了什么數字?

      請對比兩個表格,思考10秒鐘。

      答案是1。你答對了嗎?

      下面我們需要做的事情,是把數據分成兩部分,分別叫做訓練集和測試集。

      為什么這么折騰?

      因為有道理。

      想想看,如果期末考試之前,老師給你一套試題和答案,你把它背了下來。然后考試的時候,只是從那套試題里面抽取一部分考。你憑借超人的記憶力獲得了100分。請問你學會了這門課的知識了嗎?不知道如果給你新的題目,你會不會做呢?答案還是不知道。

      所以考試題目需要和復習題目有區別。同樣的道理,我們用數據生成了決策樹,這棵決策樹肯定對已見過的數據處理得很完美。可是它能否推廣到新的數據上呢?這才是我們真正關心的。就如同在本例中,你的公司關心的,不是以前的貸款該不該貸。而是如何處理今后遇到的新貸款申請。

      把數據隨機拆分成訓練集和測試集,在Python里只需要2條語句就夠了。

      from sklearn.cross_validation import train_test_split

      X_train, X_test, y_train, y_test = train_test_split(X_trans, y, random_state=1)

      我們看看訓練數據集的形狀:

      X_train.shape

      運行結果如下:

      (34881, 12)

      測試集呢?

      X_test.shape

      這是運行結果:

      (11627, 12)

      至此,一切數據準備工作都已就緒。我們開始呼喚Python中的scikit-learn軟件包。決策樹的模型,已經集成在內。只需要3條語句,直接調用就可以,非常方便。

      from sklearn import tree

      clf = tree.DecisionTreeClassifier(max_depth=3)

      clf = clf.fit(X_train, y_train)

      好了,你要的決策樹已經生成完了。

      就是這么簡單。任性吧?

      可是,我怎么知道生成的決策樹是個什么樣子呢?眼見才為實!

      這個……好吧,咱們把決策樹畫出來吧。注意這一段語句內容較多。以后有機會咱們再詳細介紹。此處你把它直接抄進去執行就可以了。

      with open("safe-loans.dot", 'w') as f:

           f = tree.export_graphviz(clf,

                                    out_file=f,

                                    max_depth = 3,

                                    impurity = True,

                                    feature_names = list(X_train),

                                    class_names = ['not safe', 'safe'],

                                    rounded = True,

                                    filled= True )


      from subprocess import check_call

      check_call(['dot','-Tpng','safe-loans.dot','-o','safe-loans.png'])


      from IPython.display import Image as PImage

      from PIL import Image, ImageDraw, ImageFont

      img = Image.open("safe-loans.png")

      draw = ImageDraw.Draw(img)

      img.save('output.png')

      PImage("output.png")

      見證奇跡的時刻到了:

      貸還是不貸:如何用 Python 和機器學習幫你決策?

      你是不是跟我第一次看到決策樹的可視化結果一樣,驚詫了?

      我們其實只讓Python生成了一棵簡單的決策樹(深度僅3層),但是Python已經盡職盡責地幫我們考慮到了各種變量對最終決策結果的影響。

      測試

      欣喜若狂的你,在悄悄背誦什么?你說想把這棵決策樹的判斷條件背下來,然后去做貸款風險判斷?

      省省吧。都什么時代了,還這么喜歡背誦?

      以后的決策,電腦可以自動化幫你完成了。

      你不信?

      我們隨便從測試集里面找一條數據出來。讓電腦用決策樹幫我們判斷一下看看。

      test_rec = X_test.iloc[1,:]

      clf.predict([test_rec])

      電腦告訴我們,它調查后風險結果是這樣的:

      array([1])

      之前提到過,1代表這筆貸款是安全的。實際情況如何呢?我們來驗證一下。從測試集目標里面取出對應的標記:

      y_test.iloc[1]

      結果是:

      1

      經驗證,電腦通過決策樹對這個新見到的貸款申請風險判斷無誤。

      但是我們不能用孤證來說明問題。下面我們驗證一下,根據訓練得來的決策樹模型,貸款風險類別判斷準確率究竟有多高。

      from sklearn.metrics import accuracy_score

      accuracy_score(y_test, clf.predict(X_test))

      雖然測試集有近萬條數據,但是電腦立即就算完了:

      0.61615205986066912

      你可能會有些失望——忙活了半天,怎么才60%多的準確率?剛及格而已嘛。

      不要灰心。因為在整個兒的機器學習過程中,你用的都是缺省值,根本就沒有來得及做一個重要的工作——優化。

      想想看,你買一臺新手機,自己還得設置半天,不是嗎?面對公司的貸款業務,你用的竟然只是沒有優化的缺省模型。可即便這樣,準確率也已經超過了及格線。

      關于優化的問題,以后有機會咱們詳細展開來聊。

      你終于擺脫了實習第一天就灰溜溜逃走的厄運。我仿佛看到了一顆未來的華爾街新星正在冉冉升起。

      茍富貴,無相忘哦。

      討論

      貸款風險判斷之外,你覺得決策樹還有哪些用武之地?除了本文提到的決策樹,你還知道哪幾種用于分類的機器學習算法?歡迎留言分享給大家,我們一起交流討論。

      雷鋒網相關閱讀:

      建行入局校園貸,正規軍沖擊下老玩家將死?

      “角色扮演”騙貸,這家安全公司如何揪出不還錢的騙子

      手把手教你如何用 Python 做情感分析

      雷峰網版權文章,未經授權禁止轉載。詳情見轉載須知

      貸還是不貸:如何用 Python 和機器學習幫你決策?

      分享:
      相關文章

      編輯

      聚焦數據科學,連接 AI 開發者。更多精彩內容,請訪問:yanxishe.com
      當月熱門文章
      最新文章
      請填寫申請人資料
      姓名
      電話
      郵箱
      微信號
      作品鏈接
      個人簡介
      為了您的賬戶安全,請驗證郵箱
      您的郵箱還未驗證,完成可獲20積分喲!
      請驗證您的郵箱
      立即驗證
      完善賬號信息
      您的賬號已經綁定,現在您可以設置密碼以方便用郵箱登錄
      立即設置 以后再說
      主站蜘蛛池模板: 国产精品一区二区 尿失禁| 日韩人妻无码精品系列| 尹人97| 在线视频这里只有精品| 日本不卡一区二区三区| 精品人妻伦九区久久aaa片| 97人妻天天爽夜夜爽二区| 色婷AV| 大陆一区视频观看| 国产午夜一区二区在线观看| 麻豆国产人妻欲求不满| 亚洲性爱视频网站| 日本二区视频在线观看| av无码免费一区二区三区| 91视频观看| 女人下边被添全过视频的网址| 久久久久久久AV| 高级艳妇交换俱乐部小说| 国产精品毛片av999999| 亚洲熟妇AV一区二区三区下载| 富婆如狼似虎找黑人老外| 三穗县| 亚洲男人的天堂av手机在线观看| 制服丝袜亚洲在线| 口爆av| xxxx免费| 99热国产这里只有精品9| 国产精品久久久久影院色| 国产精品亚洲专区无码web| 亚洲人和日本人jzz护士| 日本精品人妻无码77777| 久久国产精品无码一区二区三区| 全南县| 国产在线视频一区二区三区| 国产精品99久久久久久成人| 国产精品成人网| 狼友福利在线| 日韩AV色| 五月婷婷久久中文字幕| 丰满少妇a级黄片在线免费观看| 特级做a爰片毛片免费看无码 |