1. 程式人生 > >唯品會2018機器學習(A卷)

唯品會2018機器學習(A卷)

前言

想強調的是,機器學習中依然注重基本資料結構,演算法的知識。
個人答案,覺得有問題的歡迎交流~

一、(資料結構與演算法)列舉至少2種排序演算法(如快排),並寫出實現程式碼

這裡寫了冒泡和快速排序兩種。

  • 冒泡很簡單
    //氣泡排序
    public void bubbleSort(int[] a)
    {
        int n = a.length;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n-1; j++) {
                if
(a[j] > a[j + 1]) { int t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } } }

這裡需要注意的是,a[[j]和a[j+1]互換時,要考慮j+1的下標溢位,所以最終j只能小於n+1。

  • 快速排序,快排真的是n多年的痛,寫了這麼多年,每次寫還是會出錯,哭一會。請注意看註釋部分。
    //一趟快速排序
    public
int PartSort(int i, int j ,int[] a) { int r = a[i]; while (i < j) { while (a[j] >= r &&i<j) j--; //加了if 其實是 降低了效率的,這裡加if其實是為了i++這個語句 //可做如下優化 /* * 因為a[j]=r是,也會--,避免了if的判斷。 if (i<j) { a[i]=a[j]; i++; } */
a[i]=a[j]; System.out.println("hi:"+i+",j:"+j); //這裡不用判斷的原因是因為就算a[i]=r了,i也會++. while(a[i] <= r &&i<j) i++; /* * 優化同上 if(i<j) { a[j]=a[i]; j--; } */ a[j]=a[i]; System.out.println("li:"+i+",j:"+j); } // System.out.println("i:"+i+",j:"+j); a[i]=r; return i; } //快速排序主體 public void quickSort(int i, int j ,int[] a) { // int n = a.length-1; if(i>=j) return; System.out.println("qi:"+i+",j:"+j); int r = PartSort(i,j,a); System.out.println("r:"+r); for(int k=0;k<a.length;k++) System.out.print(a[k]); System.out.println(); quickSort(i,r-1,a); quickSort(r+1,j,a); }
二、(資料結構與演算法)現有N個數,找出其中第M大的數,這裡的N遠大於M。請說明演算法思路、複雜度

採用快速排序演算法思想,一次快速排序,返回值若為k,其實a[k]對應的位置是第k大的數,則若k>m, 則在左半部分繼續尋找第m大的數,否則在右半部分尋找第(m-k)大的數。
複雜度為O(N)。
程式碼如下:

    public int findMaxK(int i, int j, int[] a,int k)
    {
        System.out.println("findi:"+i+",j:"+j+"k:"+k);
        if(i>j)
            return -1000000; 
        int r = PartSort(i,j,a);
        System.out.println("findR:"+r);
        if (r<k)
            return findMaxK(r+1,j,a,k-r);
        else if (r>k)
            return findMaxK(i,r-1,a,k);
        else
            return a[r];
    }
三、(機器學習理論)請列舉生成模型與判別模型的區別

生成模型是通過資料學習聯合概率分佈P(x,y),然後求出條件概率分佈P(Y|X),作為預測的模型,即生成模型為:P(Y|X)=P(X,Y)/P(X)

生成模型的特點:生成模型可以還原聯合概率分佈,而判別模型不行;生成模型的收斂速度更快,即當樣本容量增大時,生成模型能更快的收斂到真實模型;當存在隱變數時,只能用生成模型。
常見的生成模型有樸素貝葉斯,隱馬爾科夫鏈。

判別模型是通過資料直接學習判別函式Y=f(X)或者條件概率作為預測模型。

判別模型的特點:判別模型直接學習的還是判別函式或者條件概率分佈,直接面對預測,往往學習的準確率要高;判別模型由於直接學習條件概率或決策函式,可以對資料進行各種程度上的抽象/定義特徵並使用特徵,因此可以簡化學習問題。
常見的判別模型有SVM,邏輯迴歸等。

四、(機器學習理論)請列舉分類模型和迴歸模型的區別
五、(機器學習理論)什麼是欠擬合、過擬合?避免過擬合有哪些途徑?

欠擬合:對訓練資料擬合不夠,偏差較大,根本的原因是特徵維度過少,導致擬合的函式無法滿足訓練集,訓練誤差較大。
過擬合:對訓練資料過度擬合,方差較大,根本的原因則是特徵維度過多,導致擬合的函式完美的經過訓練集,但是對新資料的預測結果則較差。

解決過擬合問題,則有3個途徑:

1.特徵選擇:減少特徵維度; 包括前向演算法,後向演算法以及Filter Method.
2.模型選擇:一般通過交叉驗證方法來避免過擬合。
3.正則化:裡面涉及到概率學派和貝葉斯學派的區別,但是其本質是類似與特徵選擇的,通過先驗概率,限制引數的取值,使得某些引數接近於0,則對應的特徵基本不起作用,起到降低模型複雜度的作用。

六、請列舉Random Forest和GBDT的區別

隨機森林:bagging演算法,對訓練資料進行抽樣,每次取不同的訓練資料進行決策樹的訓練,最終分類採用多數表決的方法。不同樹之間的訓練是並行的。
GBDT:boosting演算法,所有訓練資料都會一起放入模型中,而不會抽樣。通過調整樣本權重對模型進行修正得到下一個模型,即序列方法,得到最終輸出。在GBDT中,下一個模型擬合的不再是原始資料,而是梯度,以梯度去代替殘差值。

七、(機器學習理論)梯度下降法求解最優化問題的原理與步驟

假設目標函式為min L(x;a)
梯度下降的求解步驟就是不斷更新a,使得L下降,a的更新方法為:
a:=a-η*L對a的梯度。
其原理是,因為在數學中,一個函式變化最快的方向便是其梯度方向,因為是最小化問題,所以我們使得a降低。

更具體的可以參見部落格

相關推薦

2018機器學習A

前言 想強調的是,機器學習中依然注重基本資料結構,演算法的知識。 個人答案,覺得有問題的歡迎交流~ 一、(資料結構與演算法)列舉至少2種排序演算法(如快排),並寫出實現程式碼 這裡寫了冒泡和快速排序兩種。 冒泡很簡單 //氣泡

機器學習西瓜書模型評估與選擇

str 驗證 選擇 復雜 集合 數據集 枚舉 重新 模型 1、評估標準   1)經驗誤差 :訓練集上產生的誤差   2)泛化誤差:對新樣本進行預測產生的誤差   3)過擬合:經驗誤差很小甚至為零,泛化誤差很大(模型訓練的很復雜,幾乎涵蓋了訓練集中所有的樣本點)   4)欠擬

機器學習1-1 監督學習

收集 是否 分開 希望 專業 思想 技術分享 多個 無限 監督學習 在本視頻中,我將介紹一種也許是最常見的機器學習問題。即監督學習。後面將給出監督學習更正式的定義,現在最好以示例來說明什麽是監督學習。之後再給出正式的定義。 假設你想預測房價(無比需要啊!),之前,某學生已經

機器學習Machine Learning大家與資源

內容挺多的,轉過來吧 =======================國外==================== Machine Learning 大家(1):M. I. Jordan (http://www.cs.berkeley.edu/~jordan/)  &nbs

吳恩達機器學習十六機器學習流水線、上限分析

目錄 0. 前言 1. 流水線 2. 上限分析(Ceiling analysis) 學習完吳恩達老師機器學習課程的照片OCR,簡單的做個筆記。文中部分描述屬於個人消化後的理解,僅供參考。 如果這篇文章對你有一點小小的幫助,請給個關注

吳恩達機器學習第一章

機器學習可以分為監督學習和無監督學習兩大類。 一、監督學習 監督學習就是在資料中有特定標註,會對資料進行分類,比如癌症例子。監督學習得到的結果可以預測某個新資料對應的結果(線性迴歸)或是該資料屬於哪一類(邏輯迴歸)。比如癌症的預測,房價的預測等。 圈和叉就分別標識兩類資料,即在學習

機器學習 十六電商O2O優惠券使用預測-2

介紹        這篇文章是想繼續總結一遍優惠券預測,寫寫感受並進行一個記錄總結,零零散散以作為記錄整理之用。 本篇是選了三點本人覺得專案中重要的寫了一下,其它內容暫時略過 第一部分:資料清洗資料分析程式碼

機器學習 十七kaggle競賽之泰坦尼克號專案實戰-2

導航        想寫這篇部落格的由衷是做完幾個專案,有時對於圖的畫法和模型融合演算法原理理解還很膚淺,特此加深一下印象。 內容概覽 圖 pandas、matplotlib、seaborn 餅圖 直方圖

機器學習 十五 關聯分析之Apriori演算法

前言        目前隨著資料量迅速增多,從海量資料中尋找有價值的資訊帶來的成本也在不斷增加,傳統的搜尋資料方式已經不能滿足我們的需要,我們先來通過一個演算法看一下演算法時間複雜度快慢帶來的影響,通過計算耗時我們會有個感性

機器學習 十四輕鬆理解模型評價指標

篇首語        相信大家都知道下面的圖片是啥意思,每個無論在啥公司、無論哪個行業都有自己的KPI評價指標,公司會根據公司情況設定公司戰略KPI、部門KPI、以及每個人的指標,對於員工也是比較關心自己的KPI因為關係著你

機器學習 十二讓你輕鬆理解K-means 聚類演算法

前言        你還記得菜市場賣菜的嗎?書店賣書的或者是平時去超市買東西時的物品,它們是不是都根據相似性擺放在一起了呢,飲料、啤酒、零食分佈在各自區域,像這樣各級事物的相似特點或特性組織在一起的方法,在機器學習裡面即成為

機器學習 十一 SVM-支援向量機

春夜喜雨 好雨知時節,當春乃發生。 隨風潛入夜,潤物細無聲。 野徑雲俱黑,江船火獨明。 曉看紅溼處,花重錦官城。 前言         週末很多城市下開了雨,下雨中也不乏忙忙碌碌的人們,有的天不亮已經忙碌匆

機器學習評估方法

2.留出法:將資料集D劃分為兩個互斥的集合,其中一個集合作為訓練集S,另一個作為測試集T,隨機劃分,重複實驗產生多個訓練/測試集,取實驗平均值。(注:通常,會將D中大約2/3−4/5的樣本作為訓練集,其餘的作為測試集,不然,可能會導致評估結果不夠準確穩定。) 3.交叉驗證法

機器學習線性代數筆記

機器學習中的“向量”是指的只有一列的“矩陣”,這個矩陣有多少行就稱其為有多少維度 矩陣的加(減)法:兩個矩陣必須維度相同(行數列數相同)才可以加減,對應的元素相加減 矩陣的乘(除)法:     1、標量與矩陣的乘(除)法:標量與矩陣中的每個元素進行相乘(

機器學習與深度學習系列連載: 第一部分 機器學習十一決策樹2Decision Tree

決策樹2 決策樹很容易出現過擬合問題,針對過擬合問題,我們採用以下幾種方法 劃分選擇 vs 剪枝 剪枝 (pruning) 是決策樹對付“過擬合”的 主要手段! 基本策略: 預剪枝 (pre-pruning): 提前終止某些分支的生長 後剪枝 (post-pr

機器學習建模過程簡概

資料集 資料來源: 公開資料 企業資料 爬取資料 預分析 問題定義 可行性分析 模型預選擇 特徵工程 (特徵工程決定了模型的上限,對模型優化只是逼近這個上限) 資料預處理: 缺失值處理 異常處理 資料歸一化 探索性分析 相似性度量 特徵選擇: Fi

機器學習與深度學習系列連載: 第一部分 機器學習十四非監督度學習-1 Unsupervised Learning-1

非監督度學習-1 Unsupervised Learning-1(K-means,HAC,PCA) 非監督學習方法主要分為兩大類 Dimension Reduction (化繁為簡) Generation (無中生有) 目前我們僅專注化繁為簡,降維的方法,

機器學習與深度學習系列連載: 第一部分 機器學習十五非監督度學習-2 Unsupervised Learning-2Neighbor Embedding

臨近編碼 Neighbor Embedding 在非監督學習降維演算法中,高緯度的資料,在他附近的資料我們可以看做是低緯度的,例如地球是三維度的,但是地圖可以是二維的。 那我們就開始上演算法 1. Locally Linear Embedding (LLE) 我

機器學習與深度學習系列連載: 第一部分 機器學習十七非監督度學習-2 Unsupervised Learning-4Generative Models

生成模型 Generative Models 用非監督學習生成結構化資料,是非監督模型的一個重要分支,本節重點介紹三個演算法: Pixel RNN ,VAE 和GAN(以後會重點講解原理) 1. Pixel RNN RNN目前還沒有介紹,,以後會重點講解,大家

吳恩達機器學習十一K-means無監督學習、聚類演算法

目錄 0. 前言 學習完吳恩達老師機器學習課程的無監督學習,簡單的做個筆記。文中部分描述屬於個人消化後的理解,僅供參考。 如果這篇文章對你有一點小小的幫助,請給個關注喔~我會非常開心