1. 程式人生 > >MIT 6.0002 計算思維與資料科學導論 學習筆記

MIT 6.0002 計算思維與資料科學導論 學習筆記

Lec 1 導論及優化問題 【Introduction and Optimization】

一、和6.0001的比較

1.程式設計任務相對簡單
-專注於問題的解決而不是純程式設計
2.課程內容更加抽象
3.課程節奏會更快
4.不僅是學習程式設計,而且是帶你進入資料科學的王國

How do you get to Carnegie Hall?
Practice Practice Practice

二、計算模型【Computational Models】

  • 優化模型【optimization models】
  • 統計模型【statistical models】
  • 模擬模型【simulation models】

三、什麼是優化模型

  • 為目標函式求最大或最小值
    eg:從紐約去波士頓的最短時間

  • 需要遵循一系列的約束【constraints】(可能為空)
    eg:不能花超過100美元

四、揹包問題【knapsack problem】

  1. 什麼是揹包問題?
    假想一個小偷進了一個房子,想要偷走儘可能價值高的東西,但是他的負重有限,小偷應該如何在屋裡的財物中選擇合適的。
  2. 揹包問題的兩個變種

    • 0/1揹包問題
    • 部分揹包問題

    0/1揹包問題更加複雜,因為你做的每一個決定都將影響未來的決定。

  3. 0/1揹包問題的形式化
    • Each item is represented by a pair, (value, weight)
    • The knapsack can accommodate items with a total weight of no more than w
    • A vector, L, of length n, represents the set of available items. Each element of the vector is an item
    • A vector, V, of length n, is uesd to indicate whether or not items are taken. If V[i]=1, item I[i]*is taken,If *V[i]=0, item *I[i]*is not taken.

Find a V that maximizes

i=0n1V[i]I[i].value
subject to the constraint that
i=0n1V[i]I[I].weight<=w
  1. 解決方法

    1. 暴力演算法

      • 列舉所有可能的專案排列,就是說,生成專案集合的所有子集,叫做 power set.
      • 去掉所有總重超過允許重量【weight】的組合
      • 從剩下的組合中選出【value】最大的那個

      實現暴力演算法通常是不現實的
      0/1揹包問題是指數級別的

    2. 貪心演算法是一個實際可行的方案【Greedy Algorithm】

while knapsack not full
    put "best" available item in knapsack

貪心演算法無法給我們一個最優解【best answer】,但可以給我們一個足夠好的解【really good answer】

        但是best意味著什麼?
        - Most valuable
        - Least expensive
        - Highest value / units
    #### the highest ratio of value to units

 **例項**
 - 你準備吃飯
 - 你知道自己對不同食物的喜愛程度
 - 但你有一份卡路里賬單,比如說你不希望攝取超過750卡路里
 - 選擇吃哪些東西就是一個揹包問題

Class Food

class Foodobject):
    def __init__(self, n, v, w):
        self.name = n
        self.value = v
        self.calories = w

    def getValue(self):
        return self.value
    def getCost(self):
        return self.calories
    def density(self):
        return self.getValue()/self.getCost()

    def __str__(self):
        return self.name + ': <' + str(self.value)\
                + ', ' + str(self.calories) + '>'

Build Menu of Foods

def buildMenu(names, values, calories)
"""names, values, calories lists of same length.
    name a list of strings
    values and calories lists of numbers
    returns list of Foods"""
    menu = []
    for i in range(len(values)):
        menu.append(Food(name[i], value[i], calories[i]))
    return menu

Implementation of Flexible Greedy

def greedy(items, maxCost, keyFunction):
    """Assume items a list, maxCost >= 0,
    keyFunction maps elements of items to numbers"""
    itemsCopy = sorted(items, key = keyFunction, reverse = True)
    result = []
    totalValue, totalCost = 0.0, 0.0

    for i in range(len(itemsCopy)):
        if (totalCost + itemsCopy[i].getCost()) <= maxCost:
            result.append(itemCopy[i])
            totalCost += itemsCopy[i].getCost()
            totalValue += itemsCopy[i].getValue()
    return (result, totalValue)

keyFunction : it will be used to sort the items
so ,maybe keyFunction will just return the value or maybe it will return the weight or maybe it will return some function of the density.
so I use keyFunction to define what I mean by best

Algorithmic Efficiency

sort nlogn n = len(items)
loop n
sum O(nlogn)

Using greedy

def testGreedy(items, constraint, keyFunction):
    taken, val = greedy(items, constraint, keyFunction)
    print('Total value of items taken =', val)
    for item in taken :
    print('  ', item)

using greedy

Lambda

  • lambda用於建立一個匿名函式
  • 它可以非常的便利
  • 可以寫出非常複雜的lambda expressions
  • 不要用 def 來代替,除非函式內容真的非常多
  • for one lines,lambda is great

using greedy

為什麼會得出不同的答案?

  • choose the locally optional answer at every point
  • greedy algorithm says never go backwards

貪心演算法的優點和缺點

  • 容易寫
  • 效率比較高

  • 但是不能總是得到best solution,而且不知道有多麼近似

相關推薦

MIT 6.0002 計算思維資料科學導論 學習筆記

Lec 1 導論及優化問題 【Introduction and Optimization】 一、和6.0001的比較 1.程式設計任務相對簡單 -專注於問題的解決而不是純程式設計 2.課程內容更加抽象 3.課程節奏會更快 4.不僅是學習程

Python資料科學手冊學習筆記

Numpy入門 檢視numpy版本 import numpy numpy.__version__ 2.匯入numpy的匯入 import numpy as np 3.建立陣列 import nu

第3章 Pandas資料處理(3.1-3.2)_Python資料科學手冊學習筆記

第2章介紹的NumPy和它的ndarray物件. 為多維陣列提供了高效的儲存和處理方法. Pandas是在NumPy的基礎上建立的新程式庫, 提供DataFrame資料結構. DataFrame帶行標籤(索引),列標籤(變數名),支援相同資料型別和缺失值的多維陣

第3章 Pandas資料處理(3.4-3.5)_Python資料科學手冊學習筆記

3.4 Pandas 數值運算方法 對於一元運算(像函式與三角函式),這些通用函式將在輸出結果中保留索引和列標籤; 而對於二元運算(如加法和乘法), Pandas在傳遞通用函式時會自動對齊索引進行計算. 這就意味著,儲存資料內容和組合不同來源的資料—兩處在Num

第3章 Pandas資料處理(3.3)_Python資料科學手冊學習筆記

3.3 資料取值與選擇 第2章回顧: - NumPy中取值操作: arr[2,1] - 切片操作: arr[:,1:5] - 掩碼操作: arr[arr>0] - 花哨的索引操作: arr[0,[1,5]] - 組合操作: arr[:,[1:5]] 3.3

第3章 Pandas資料處理(3.9-3.10)_Python資料科學手冊學習筆記

3.9 累計與分組 3.9.1 行星資料 import seaborn as sns planets = sns.load_dataset('planets') planets.shape (1035, 6) planets.head()

R語言資料探勘學習筆記(1):資料探勘相關包的介紹

今天發現一個很不錯的部落格(http://www.RDataMining.com),博主致力於研究R語言在資料探勘方面的應用,正好近期很想系統的學習一下R語言和資料探勘的整個流程,看了這個部落格的內容,心裡久久不能平靜。決定從今天開始,只要晚上能在11點之前把碗洗好,就花一個小時的時間學習部落格上的內容,並把

第3章 Pandas資料處理(3.7-3.8)_Python資料科學手冊學習筆記

3.7 合併資料集: Concat與Append操作 - pd.concat - pd.merge - pd.join import pandas as pd def make_df(cols,ind): data = {c: [str(c) + st

分享《機器學習資料科學(基於R的統計學習方法)》高清中文PDF+原始碼

下載:https://pan.baidu.com/s/1Lrgtp7bnVeLoUO46qPHFJg 更多資料:http://blog.51cto.com/3215120 高清中文PDF,299頁,帶書籤目錄,文字可以複製。配套原始碼。 本書指導讀者利用R語言完成涉及機器學習的資料科學專案。作者: Da

雲端計算資料 叢集搭建 學習筆記

雲集群的搭建 一、虛擬機器設定:   1.開啟ESXI虛擬機器;(本人所用)   2.網路設定為橋接模式   3.按F2設定系統,輸入密碼   4.Restart Manangement Network   5.esc 退出 加硬碟:   1.開啟虛擬機器給出的ip地址,檢視VWware ES

資料科學 - [Today is Matplotlib] - [plt隨用筆記]

在matplotlib上如何輸出中文的一般步驟: mpl.rcParams['font.sans-serif'] = [u'SimHei'] mpl.rcParams['axes.unicode_minus'] = False     設定colo

資料科學 - [Today is sklearn] - [sklearn api]

分割資料將資料分為訓練集和測試集,使用sklearn的model_selection庫裡面的 train_test_split from sklearn.model_selection import train_test_split x_train, x_test, y_train,

資料科學 - [Today is Numpy] - [np隨用隨記]

numpy.loadtxt(fname, dtype=, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0) data = np.loadtxt(path,

機器學習資料科學決策樹指南

還在為如何抉擇而感到糾結嗎?快採用決策樹(Decision Tree)演算法幫你做出決定吧。決策樹是一類非常強大的機器學習模型,具有高度可解釋的同時,在許多工中也有很高的精度。決策樹在機器學習模型領域的特殊之處在於其資訊表示的很清楚,而不像一些機器學習方法是個黑匣子,這是因為決策樹通過訓練學到的

機器學習資料科學 基於R的統計學習方法(一)-第1章 機器學習綜述

1.1 機器學習的分類 監督學習:線性迴歸或邏輯迴歸, 非監督學習:是K-均值聚類, 即在資料點集中找出“聚類”。 另一種常用技術叫做主成分分析(PCA) , 用於降維, 演算法的評估方法也不盡相同。 最常用的方法是將均方根誤差(RMSE) 的值降到最小, 這一數值用於評價測試集的預測結果是否準確。 R

資料科學系統學習】機器學習演算法 # 西瓜書學習記錄 [7] 支援向量機(一)

這兩篇內容為西瓜書第 6 章支援向量機 6.1,6.2,6.4,6.3 的內容: 6.1 間隔與支援向量 6.2 對偶問題 6.4 軟間隔與正則化 6.3 核函式 由於本章內容較多,分為兩篇來敘述。本篇所包含內容為間隔與支援向量和對偶問題。 如移動端無法正常

資料科學系統學習】機器學習演算法 # 西瓜書學習記錄 [8] 支援向量機(二)

這兩篇內容為西瓜書第 6 章支援向量機 6.1,6.2,6.4,6.3 的內容: 6.1 間隔與支援向量 6.2 對偶問題 6.4 軟間隔與正則化 6.3 核函式 由於本章內容較多,分為兩篇來敘述。本篇所包含內容為軟間隔與正則化和核函式。關於間隔與支援向量和

資料科學系統學習】機器學習演算法 # 西瓜書學習記錄 [9] 決策樹

本篇內容為西瓜書第 4 章決策樹 4.1,4.2,4.3 的內容: 4.1 基本流程 4.2 劃分選擇 4.3 剪枝處理 如移動端無法正常顯示文中的公式,右上角跳至網頁即可正常閱讀。 決策樹 (decision tree) 是一種基本的分類與迴歸方法。在分類問

資料科學系統學習】機器學習演算法 # 西瓜書學習記錄 [10] 決策樹實踐

本篇內容為《機器學習實戰》第 3 章決策樹部分程式清單。所用程式碼為 python3。 決策樹優點:計算複雜度不高,輸出結果易於理解,對中間值的缺失不敏感,可以處理不相關特徵資料。缺點:可能會產生過度匹配問題。適用資料型別:數值型和標稱型 在構造決策樹時,我們需要

資料科學系統學習】機器學習演算法 # 西瓜書學習記錄 [11] 整合學習

本篇內容為西瓜書第 8 章整合學習 8.1 8.2 8.3 8.4 8.5 的內容: 8.1 個體與整合 8.2 Boosting 8.3 Bagging與隨機森林 8.4 結合策略 8.5 多樣性 如移動端無法正常顯示文中的公式,右上角跳至網頁即可正常閱讀。