機械学習の前提条件を共有 - ボストン価格予測
Udacityから高度でのミニプロジェクトの作業を機械学習のシェアは、エントリのために非常に適した、退屈な部分を削りに加えて、ほとんどのマシンが明確に理解を持っているため、基本的なプロセスを学ぶために、最も重要かつ基本的なステップを保持し、
項目説明
住宅データトレーニングを使用して郊外のボストン、マサチューセッツ州のモデル、およびモデルの予測力とパフォーマンステストをテストします。
プロジェクト分析
データセットフィールド説明:
RM
:住宅の部屋の平均数。LSTAT
:エリアは、低所得の比率であると考えられています。PTRATIO
:タウン学生教師の比率と数;MEDV
:家庭(私たちは値を予測したい対象地物)の中間価格。
一階の部屋、二階、部屋、キッチン、寝室の数、地下:実際には、最初の3つの機能の後に振り返ってみるの特徴の組み合わせは、すべての今、そのようなRMとして、通常、元のデータの機能を複数に分割し、掘削しなければなりません部屋など、教育にそこに簡素化する必要があります。
我々は回帰に属するの値を予測したいMEDV、別の小さな(500未満のデータポイント)小さなデータセットのデータセット、回帰、今私が最初に私たちは、後で見てみましょう、SVMを使用して検討します選択;
ショータイム
ステップ1のデータのインポート
注意点:
- 複数のCSVデータ(例えば、多くの販売プロジェクト、販売データとストアデータは、データベースの二つのテーブルと同様二つの別々のCSVである)場合は、ここでは一般的に接続されています。
- トレーニングさもなければトレーニングモデル(例えば、モデルのトレーニング、および予測誤差寸法一貫性のないテストデータと訓練データなど)の問題が存在することになる、後続のデータ処理のための一貫性のあるデータリンクを、テスト。
- 観測データの量、その後の選択アルゴリズムに比較的大きな影響を与えるのデータ量、および他の可視化の方法、一般的にそれが見えます。
- パンダメモリの最適化、このプロジェクトは現在ありませんが、単純に(例えばINT8へのint64など)の変換機能は、メモリの使用量を削減フィールドのデータ型を下に見て、有用である私の最も最近のプロジェクトは、それが、ここで非常に重要です大量のデータを保存するためにPCのメモリを爆発するのは簡単です。
コードの場合:
# 载入波士顿房屋的数据集
data = pd.read_csv('housing.csv')
prices = data['MEDV']
features = data.drop('MEDV', axis = 1)
# 完成
print "Boston housing dataset has {} data points with {} variables each.".format(*data.shape)
ステップ2の解析データ
データをロードした後、治療の様々な方法は、データに、最初少し遅く、予備的な理解を急いで、プラスのモデルの様々なを指示しないでくださいその様々な統計的特性、分布、ターゲット機能との関係の価値を理解するために、最も良い可視化は、予期しない多くのものが表示されます。
基本的な統計計算
統計的計算は場合、その最大値、最小値、平均値、中央値、パーセンタイルなどの特徴の全体的な価値を理解するために使用される、これらのフィールドが意味するために理解するのが最も簡単です。
コードの場合:
#目标:计算价值的最小值
minimum_price = np.min(prices)# prices.min()
#目标:计算价值的最大值
maximum_price = np.max(prices)# prices.max()
#目标:计算价值的平均值
mean_price = np.mean(prices)# prices.mean()
#目标:计算价值的中值
median_price = np.median(prices)# prices.median()
#目标:计算价值的标准差
std_price = np.std(prices)# prices.std()
観測された機能
ここでは、このような正の相関または負の相関などの様々な特性と目標との間の関係の主な考慮事項は、通常のビジネスを理解しています、それは一般的に言えば、この時点、機械学習プロジェクト、ビジネスのより多くの理解を拡張したもので、いわゆる機能が実際に動作するので、それは、良い結果を得ることです簡単に、プロセスをferretingのビジネスをビジネスを理解することです。
例えば、3つの特性の問題:
- RM:部屋の数は、住宅価格との有意な正の相関関係でなければなりません。
- LSTAT:このレベルではある程度の低所得コミュニティの割合を表し、それは負の相関である必要があります。
- PTRATIO:高い学生/教師の比率、教育資源の不足を示す、それは負の相関である必要があります。
上記の3つの点は、視覚的な方法で確認することができます同じことが、実際には、ここで注意することは、いくつかのケースでは、主観的な感覚と客観的真実は正反対で、検証ではなく、主観的な憶測に頼る行く必要があります。
ステップ3データ・パーティショニング
モデルの品質を確認するために、通常の実施はCV、即ち、クロスバリデーションであり、基本的な考え方は、均一にN-1ブロックはトレーニングを受けるデータブロックNを分割し、予測結果とさらに予測との比較を行うことです各ブロックは、検証データとして使用されるまで、実際の結果は、この手順がN回繰り返されます。
コードの場合:
# 提示: 导入train_test_split
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(features, prices, test_size=0.2, random_state=RANDOM_STATE)
print X_train.shape
print X_test.shape
print y_train.shape
print y_test.shape
ステップ4の評価関数が定義されています
これは主に、最も精度(精度、リコールも使用は、具体的にどのような多くの注目ビジネスシナリオを参照すること)、RMSEによって回帰(平均二乗誤差)というように、実際にあると分類問題などの問題の観点で定義されています事業特性に基づいたプロジェクトの時間の評価関数をカスタマイズする必要がしばしばあり、より柔軟性があり、
ステップ5チューニングモデル
GridSearchグリッドモデルのパラメータは、データの量を考慮して最適な組み合わせを、ここでは可能な関心の数を検索し、ならびにその組み合わせは、ハによって実行時間が長すぎる避けます。
コードの場合:
from sklearn.model_selection import KFold,GridSearchCV
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import make_scorer
def fit_model(X, y):
""" 基于输入数据 [X,y],利于网格搜索找到最优的决策树模型"""
cross_validator = KFold()
regressor = DecisionTreeRegressor()
params = {'max_depth':[1,2,3,4,5,6,7,8,9,10]}
scoring_fnc = make_scorer(performance_metric)
grid = GridSearchCV(estimator=regressor, param_grid=params, scoring=scoring_fnc, cv=cross_validator)
# 基于输入数据 [X,y],进行网格搜索
grid = grid.fit(X, y)
# 返回网格搜索后的最优模型
return grid.best_estimator_
あなたは、私が推測する、あなたの場所にSVMを使用して検討することができますので、あなたがハを試すことができ、プロジェクトがデシジョンツリーモデルで選択されたときに見て、今見て、このような小さなデータセット内のツリーモデルは、実際には、オーバーフィッティングすることは比較的容易であることができますSVMは最高です。
学習曲線
以下に示すように分析をプロットした曲線を学習、モデルの現在の状態についての基本的な理解があってもよいです。
、この時点での状況はあなたが銭モデルフィッティングを示す、ハイパーパラメータMAX_DEPTHは、重要なトレーニングスコアが低すぎる1と3です見ることができ、かつ分析的ギャップの6と10のMAX_DEPTH、重要なトレーニングのスコアと検証が大きすぎる場合オーバーフィッティングがあることを示し、私たちは、すなわち4,5で、3と6の間の初期最適なパラメータを推測することができる学習曲線によって分析し、他のパラメータを視覚化することができ、それは、決定又はunderfitting上にありますフィッティングは、別々にする処理。
概要
以上の工程を経て、非常に単純なことができ、明らかに機械学習プロジェクトのプロセス全体を参照してください、実際には、より複雑なプロセスはまた、これらの簡単な手順のいくつかの拡張機能であり、多くの場合、より困難なビジネスを理解するために、十分な理解がありませんあなたは、ハード小さなパートナー、長い道のりああを作業する必要がありますするプロジェクトの良いか悪いかの特徴が反映されて、良い結果を得ることが困難な部分、。
プロジェクトリンク
- 拾い読みを通じてnbviewer視点。
- データファイルを経由して設定することができ、プロジェクトのソースファイル、GitHubのボストンプロジェクト買収、フォロー、フォーク、スターを歓迎。
遂に
:私たちは、次のようなフォーク・プロジェクト、データ解析とマイニングプロジェクトは首長に従って、スクリプトツールのPythonの様々な、他のニーズのものがある場合、キーは、独自の機械学習プロジェクトを行うことです参照私のGithubに行くことができますHTTPS:/ /github.com/NemoHoHaloAi