トム・ミッチェル、1996:機械学習は、あるプログラムが(自分の)経験から、特定のタスクに彼らのパフォーマンスを向上させる方法の研究。 機械学習のデータや過去の経験で、標準的なコンピュータプログラムのパフォーマンスを最適化するために。そこ性能基準は、速度、精度、および過去の経験、それがデータであるかもしれません。
問題を学習機械は、一般的に2つのカテゴリに分かれますが、それかどうかを分類または回帰でいる、我々は最終的に学ぶの機能は次のとおりです。
回帰:最終結果は値であり、
分類:最終結果はカテゴリです
私は次のようにデータ・セット・マッピングがある持っていると仮定します。
私たちは、問題の行に戻って、そして今、私は後で新しい値を予測を容易にするために、私の既存のデータセットの上に合わせて機能を見つける必要があります。
では、どのように最適な機能を見つけるのですか?この関数ので、 xが与えられ、その後、事実は、我々が調整する必要があるということであるK とB の値を。
その確かな評価指標を調整するために、私を確認する方法があるので、kは、bが良いか悪いですか?我々我々は、現在の計算できK 、Bの誤差が最小である場合、我々は、元のデータセット毎の真値の誤差計算された値を、次いで平均K 、Bは最適にとられています。
ここでは、また、このような絶対値計算など他の方法で使用することができ、二乗誤差の予測値と真の値をとります。
那么如何快速计算这个loss值呢?我们就需要要用到梯度下降方法。
我们按照这个思路以自带数据集波士顿放假预测为例,以房间数设置为x,房间售价则是y实现代码如下:
1 #!/usr/bin/env python 2 # __author__ = '北方姆Q' 3 # -*- coding: utf-8 -*- 4 5 6 import random 7 from sklearn.datasets import load_boston 8 9 10 data_set = load_boston() 11 x, y = data_set['data'], data_set['target'] 12 X_rm = x[:, 5] 13 14 15 def price(rm, k, b): 16 return k * rm + b 17 18 19 def loss(y, y_hat): 20 """ 21 绝对值平均 22 :param y: 23 :param y_hat: 24 :return: 25 """ 26 return sum((y_i - y_hat_i)**2 for y_i, y_hat_i in zip(list(y), list(y_hat)))/len(list(y)) 27 28 29 def partial_derivative_k(x, y, y_hat): 30 """ 31 k的导数 32 :param x: 33 :param y: 34 :param y_hat: 35 :return: 36 """ 37 n = len(y) 38 gradient = 0 39 for x_i, y_i, y_hat_i in zip(list(x), list(y), list(y_hat)): 40 gradient += (y_i-y_hat_i) * x_i 41 return -2 * gradient / n 42 43 44 def partial_derivative_b(y, y_hat): 45 """ 46 b的导数 47 :param y: 48 :param y_hat: 49 :return: 50 """ 51 n = len(y) 52 gradient = 0 53 for y_i, y_hat_i in zip(list(y), list(y_hat)): 54 gradient += (y_i-y_hat_i) 55 return -2 * gradient / n 56 57 58 def boston_loss(): 59 k = random.random() * 200 - 100 60 b = random.random() * 200 - 100 61 62 learning_rate = 1e-3 63 64 iteration_num = 1000000 65 losses = [] 66 for i in range(iteration_num): 67 price_use_current_parameters = [price(r, k, b) for r in X_rm] 68 69 current_loss = loss(y, price_use_current_parameters) 70 losses.append(current_loss) 71 print("Iteration {}, the loss is {}, parameters k is {} and b is {}".format(i, current_loss, k, b)) 72 73 k_gradient = partial_derivative_k(X_rm, y, price_use_current_parameters) 74 b_gradient = partial_derivative_b(y, price_use_current_parameters) 75 76 k = k + (-1 * k_gradient) * learning_rate 77 b = b + (-1 * b_gradient) * learning_rate 78 best_k = k 79 best_b = b 80 81 boston_loss()