udacity 機器學習課程 project 1

 

MODE 衆數html

mean 均值python

median 中位數react

standard deviation 標準差git

 

numpy: 

    import numpy as np

    array_1 = np.array([[1, 2], [3, 4]], float)
    array_2 = np.array([[5, 6], [7, 8]], float)
    print array_1 + array_2
    print ""
    print array_1 - array_2
    print ""
    print array_1 * array_2


    array_1 = np.array([1, 2, 3], float)
    array_2 = np.array([[6], [7], [8]], float)
    print np.mean(array_1)
    print np.mean(array_2)
    print ""
    print np.dot(array_1, array_2)

np.dotgithub

 

    Pandas:

    建立一個Series:
web

import pandas as pd
series = pd.Series(['Dave', 'Cheng-Han', 'Udacity', 42, -1789710578])
print series

 

cuteness = pd.Series([1, 2, 3, 4, 5], index=['Cockroach', 'Fish', 'Mini Pig',
                                                 'Puppy', 'Kitten'])
print cuteness > 3
print ""
print cuteness[cuteness > 3]

    建立一個數據框,DataFram算法

    data = {'year': [2010, 2011, 2012, 2011, 2012, 2010, 2011, 2012],
            'team': ['Bears', 'Bears', 'Bears', 'Packers', 'Packers', 'Lions',
                     'Lions', 'Lions'],
            'wins': [11, 8, 10, 15, 11, 6, 10, 4],
            'losses': [5, 8, 6, 1, 5, 10, 6, 12]}
    football = pd.DataFrame(data)
    print football

    print football.dtypes
    print ""
    print football.describe()
    print ""
    print football.head()
    print ""
    print football.tail()

 

data = {'year': [2010, 2011, 2012, 2011, 2012, 2010, 2011, 2012],
            'team': ['Bears', 'Bears', 'Bears', 'Packers', 'Packers', 'Lions',
                     'Lions', 'Lions'],
            'wins': [11, 8, 10, 15, 11, 6, 10, 4],
            'losses': [5, 8, 6, 1, 5, 10, 6, 12]}
football = pd.DataFrame(data)
print football['year']
print ''
print football.year  # shorthand for football['year']
print ''
print football[['year', 'wins', 'losses']]   #顯示year,wins,losses,列

print football.iloc[[0]]    #顯示第一行
print football[3:5] 
print football[football.wins > 10]  #打印wins大於10的數據
print football[(football.wins > 10) & (football.team == "Packers")]

 

'''Using the dataframe's apply method, create a new Series called 
    avg_medal_count that indicates the average number of gold, silver,
    and bronze medals earned amongst countries''' avg_medal_count = df[['gold', 'silver','bronze']].apply(numpy.mean)  #使用apply(numpy.mean)計算均值
df['points'] = df[['gold','silver','bronze']].dot([4, 2, 1])
olympic_points_df = df[['country_name','points']]
#使用點積 計算 得分
精確率P,召回率R
P=TP/(TP+FP),

R=TP/(TP+FN),
TP 表示True Positive, FP表示False Positive。
FN 表示Flase Negative,TF表示True Negative。

誤差形成的偏差 - 精度和欠擬合

如前所述,若是模型具備足夠的數據,但因不夠複雜而沒法捕捉基本關係,則會出現誤差。這樣一來,模型一直會系統地錯誤表示數據,從而致使預測精度低。這種現象叫作欠擬合(underfitting)。api

簡單來講,若是模型不適當,就會出現誤差。舉個例子:若是對象是按顏色和形狀分類的,但模型只能按顏色來區分對象和將對象分類(模型過分簡化),於是一直會錯誤地分類對象。數組

或者,咱們可能有本質上是多項式的連續數據,但模型只能表示線性關係。在此狀況下,咱們向模型提供多少數據並不重要,由於模型根本沒法表示其中的基本關係,咱們須要更復雜的模型。markdown

 

方差形成的偏差 - 精度和過擬合

在訓練模型時,一般使用來自較大母體(訓練集)的有限數量樣本。若是利用隨機選擇的數據子集反覆訓練模型,能夠預料它的預測結果會因提供給它的具體樣本而異。在這裏,方差(variance)用來測量預測結果對於任何給定的測試樣本會出現多大的變化。

出現方差是正常的,但方差太高代表模型沒法將其預測結果泛化到從中抽取訓練樣本的較大母體。對訓練集高度敏感也稱爲過擬合(overfitting),並且一般出如今模型過於複雜或咱們沒有足夠的數據支持它時。

一般,能夠利用更多數據進行訓練,以下降模型預測結果的方差並提升精度。

 

把數據集分爲訓練集和測試集

>>> import numpy as np
>>> from sklearn import cross_validation
>>> from sklearn import datasets
>>> from sklearn import svm

>>> iris = datasets.load_iris()
>>> iris.data.shape, iris.target.shape
((150, 4), (150,))

 

>>> X_train, X_test, y_train, y_test = cross_validation.train_test_split(
...     iris.data, iris.target, test_size=0.4, random_state=0)

>>> X_train.shape, y_train.shape
((90, 4), (90,))
>>> X_test.shape, y_test.shape
((60, 4), (60,))

>>> clf = svm.SVC(kernel='linear', C=1).fit(X_train, y_train)
>>> clf.score(X_test, y_test)                           
0.96...

 

   K折交叉驗證

>>> import numpy as np
>>> from sklearn.cross_validation import KFold

>>> kf = KFold(4, n_folds=2)
>>> for train, test in kf:
...     print("%s %s" % (train, test))
[2 3] [0 1]
[0 1] [2 3]

 

sklearn 中的 GridSearchCV

GridCV 用於系統地完全檢查參數調整的多種組合,並在肯定哪次調整帶來最佳性能時進行交叉驗證。它的好處是,只需增長几行代碼,就能完全檢查許多種組合。

下面是來自 sklearn 文檔的一個示例(詳見此處):

parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]}
svr = svm.SVC()
clf = grid_search.GridSearchCV(svr, parameters)
clf.fit(iris.data, iris.target)

讓咱們逐行進行說明。

parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]} 
參數字典以及您想嘗試的可能的值。在這種狀況下,他們在嘗試找到內核(可能的選擇爲'linear'和'rbf')和C語言(可能的選擇爲1和10)的最佳方案。

這時,自動生產如下(內核、C語言)組合: [('rbf', 1), ('rbf', 10), ('linear', 1), ('linear', 10)]。各組合均用於訓練SVM,並使用交叉驗證對性能進行評估。

svr = svm.SVC() 
這與建立分類器有點相似,就如咱們從第一節課一直在作的同樣。可是請注意,「clf」到下一行纔會生成——這兒僅僅是在說採用哪一種算法。另外一種思考方法是,「分類器」在這種狀況下不只僅是一個算法,而是算法加參數值。請注意,這裏不需對內核或C語言作各類嘗試;下一行將處理這個問題。

clf = grid_search.GridSearchCV(svr, parameters) 
這是第一個難以想象之處,分類器建立好了。 咱們傳達算法 (svr) 和參數字典來嘗試 (參數) 而分類器則生成一個網格的參數組合進行嘗試。

clf.fit(iris.data, iris.target) 
第二個難以想象之處。 擬合函數如今嘗試了全部的參數組合,並返回一個合適的分類器,自動調整至最佳參數組合。如今您即可經過clf.bestestimator.得到參數值。

參考此處的特徵臉方法代碼。使用 GridSearchCV 調整了 SVM 的參數?

 

 'C':[1e3,5e3,1e4,5e4,1e5],             
'gamma': [0.0001, 0.0005, 0.001, 0.005, 0.01, 0.1]

項目概述

項目概述

在此項目中,咱們將對爲馬薩諸塞州波士頓地區的房屋價格收集的數據應用基本機器學習概念,以預測新房屋的銷售價格。您首先將探索這些數據以獲取數據集的重要特徵和描述性統計信息。接下來,您要正確地將數據拆分爲測試數據集和訓練數據集,並肯定適用於此問題的性能指標。而後,您將使用不一樣的參數和訓練集大小分析學習算法的性能圖表。這讓您可以挑選最好地泛化到未見過的數據的最佳模型。最後,您將根據一個新樣本測試此最佳模型並將預測的銷售價格與您的統計數據進行比較。

使用模型評估和驗證 中的補充課程爲此項目作準備。

項目亮點

此項目旨在讓您熟練地在 Python 中處理數據集並使用 NumPy 和 Scikit-Learn 應用基本機器學習技術。在使用 sklearn 庫中的許多可用算法以前,先練習分析和解釋您模型的表現可能有所幫助。

經過完成此項目您將會學習(並最終知道)如下知識:

  • 如何使用 NumPy 調查數據集的潛在特徵。
  • 如何分析各類學習性能圖以瞭解方差和誤差。
  • 如何肯定用於從未看見的數據進行預測的最佳猜想模型。
  • 如何評估模型使用以前的數據處理未看見數據的表現。

可在此處 找到可供下載的「boston_housing.py」舊版本。

 

項目描述

波士頓房屋市場競爭異常激烈,您想成爲當地最好的房地產中介。爲了與同行競爭,您決定使用幾個基本的機器學習概念來幫助您和客戶找到其房屋的最佳銷售價格。幸運的是,您遇到了波士頓房屋數據集,其中包含大波士頓社區的房屋的各類特徵的累積數據,包括其中各個地區的房屋價格的中值。您的任務是利用可用工具基於統計分析來構建一個最佳模型。而後使用該模型估算客戶房屋的最佳銷售價格。

對於此任務,請在下面的「可下載內容」部分中下載「boston_housing.ipynb」文件。雖然已經實現了某些代碼以便於您開始操做,但您仍須要實現其餘功能才能成功地回答 notebook 中包含的全部問題。可在如下幻燈片上找到包含的問題以供參考。除非咱們要求,不然不要修改已包含的代碼。

您還能夠訪問咱們的項目 GitHub 以便訪問此納米學位的全部項目。

軟件和庫

對於此項目,您須要安裝如下軟件和 Python 庫:

可交付成果

提交的文件中應包含如下文件而且能夠打包爲單個 .zip 文件:

  • 包含完整實現且可正常運行的代碼的「boston_housing.ipynb」文件,並已執行全部代碼塊和顯示了輸出。
  • PDF 格式的項目報告(能夠直接將 notebook 另存爲包含答案的 PDF,或者提交只包含問題和答案的單獨文檔)。

可在此處 找到可供下載的「boston_housing.py」舊版本。

 

項目報告問題

可在此處 找到波士頓房屋數據集的描述。使用此幻燈片做爲您在 notebook 中遇到的項目問題的參考。隨附的 PDF 報告中必須包含這些問題(以及您的答案)。

統計分析與數據研究

此問題將整合到項目 notebook 輸出中。
使用 NumPy 庫計算有關此數據集的幾個有意義的統計數據:

  • 收集了多少個數據點(房屋)?
  • 每所房屋存在多少個特徵?
  • 最低房屋價格是多少?最高價格是多少?
  • 房屋價格的均值是多少?中間值是多少?
  • 全部房屋價格的標準誤差是多少?

1) 在給定房屋的可用特徵中,選擇您認爲比較重要的三個並簡要描述它們衡量的方面。

2) 使用模板代碼中客戶的特徵集「CLIENT_FEATURES」,哪些值與所選特徵對應?

評估模型性能

3) 爲何要將數據拆分紅訓練和測試子集?

4) 下面哪一個性能指標最適合預測房屋價格和分析錯誤?爲何?

  • 準確率
  • 精確率
  • 召回率
  • F1 分數
  • 均方偏差 (MSE)
  • 平均絕對偏差 (MAE)

5) 什麼是網格搜索算法?它在哪些狀況下適用?

6) 什麼是交叉驗證?對模型使用交叉驗證的效果如何?爲何在使用網格搜索時,交叉驗證會有幫助?

分析模型性能

7) 選擇您的代碼建立的學習曲線圖之一。模型的最大深度是多少?當訓練集大小增長時,訓練偏差會出現什麼狀況?描述測試偏差出現的狀況。

8) 查看最大深度分別爲 1 和 10 的模型的學習曲線圖。當模型使用完整訓練集時,若是最大深度爲 1,它是否會出現高誤差或高方差?最大深度爲 10 時呢?

9) 根據模型複雜度圖表,描述當最大深度增長時的訓練和測試偏差。根據您對圖表的解讀,哪一個最大深度會促使模型最好地泛化數據集?爲何?

模型預測

爲了回答如下問題,建議您屢次運行 notebook 並使用中間值和均值做爲結果。

10) 使用網格搜索時,模型的最佳最大深度是多少?此結果與您最初的直觀印象相好比何?

11) 使用參數通過調整的模型,客戶房屋的最佳銷售價格是多少?此銷售價格與您基於數據集計算的統計數據相好比何?

12) 用幾句話討論您是否會使用此模型預測客戶在波士頓地區將來房屋的銷售價格。

可在此處 找到可供下載的「boston_housing.py」舊版本。

 

 

coefficient of determination

參考 http://stattrek.com/statistics/dictionary.aspx?definition=coefficient_of_determination

 

from sklearn.metrics import r2_score
def performance_metric(y_true, y_predict):
    """ Calculates and returns the performance score between 
        true and predicted values based on the metric chosen. """
    
    # TODO: Calculate the performance score between 'y_true' and 'y_predict'
    score = r2_score(y_true, y_predict)
    
    # Return the score
    return score

 

 

# TODO: Import 'make_scorer', 'DecisionTreeRegressor', and 'GridSearchCV'
from sklearn.metrics import make_scorer
from sklearn.tree import DecisionTreeRegressor
from sklearn.grid_search import GridSearchCV
def fit_model(X, y):
    """ Performs grid search over the 'max_depth' parameter for a 
        decision tree regressor trained on the input data [X, y]. """
    
    # Create cross-validation sets from the training data
    cv_sets = ShuffleSplit(X.shape[0], n_iter = 10, test_size = 0.20, random_state = 0)

    # TODO: Create a decision tree regressor object
    regressor = DecisionTreeRegressor()

    # TODO: Create a dictionary for the parameter 'max_depth' with a range from 1 to 10
    params = {'max_depth' : range(1,11)}

    # TODO: Transform 'performance_metric' into a scoring function using 'make_scorer' 
    scoring_fnc = make_scorer(performance_metric)

    # TODO: Create the grid search object
    grid = GridSearchCV(regressor, params, scoring_fnc, cv=cv_sets)

    # Fit the grid search object to the data to compute the optimal model
    grid = grid.fit(X, y)

    # Return the optimal model after fitting the data
    return grid.best_estimator_
相關文章
相關標籤/搜索