機械学習、単純な線形回帰時間、勾配降下導入の初期導入

トム・ミッチェル、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()

 

おすすめ

転載: www.cnblogs.com/bfmq/p/11985564.html