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_
相关文章
相关标签/搜索