Ex 3: Isotonic Regression

通用範例/範例三: Isotonic Regression

迴歸函數採用遞增函數。
    y[] are inputs (real numbers)
    y_[] are fitted
這個範例的主要目的:
比較
    Isotonic Fit
    Linear Fit

(一) Regression「迴歸」

「迴歸」就是找一個函數,盡量符合手邊的一堆數據。此函數稱作「迴歸函數」。

(二) Linear Regression「線性迴歸」

迴歸函數採用線性函數。誤差採用平方誤差。
class sklearn.linear_model.LinearRegression
二維數據,迴歸函數是直線。

(三) Isotonic Regression「保序迴歸」

具有分段迴歸的效果。迴歸函數採用遞增函數。
class sklearn.isotonic.IsotonicRegression
採用平方誤差,時間複雜度 O(N) 。

(四) 完整程式碼

Python source code: plot_isotonic_regression.py
1
print(__doc__)
2
3
# Author: Nelle Varoquaux <[email protected]>
4
# Alexandre Gramfort <[email protected]>
5
# Licence: BSD
6
7
import numpy as np
8
import matplotlib.pyplot as plt
9
from matplotlib.collections import LineCollection
10
11
from sklearn.linear_model import LinearRegression
12
from sklearn.isotonic import IsotonicRegression
13
from sklearn.utils import check_random_state
14
15
n = 100
16
x = np.arange(n)
17
rs = check_random_state(0)
18
y = rs.randint(-50, 50, size=(n,)) + 50. * np.log(1 + np.arange(n))
19
20
###############################################################################
21
# Fit IsotonicRegression and LinearRegression models
22
23
ir = IsotonicRegression()
24
25
y_ = ir.fit_transform(x, y)
26
27
lr = LinearRegression()
28
lr.fit(x[:, np.newaxis], y) # x needs to be 2d for LinearRegression
29
30
###############################################################################
31
# plot result
32
33
segments = [[[i, y[i]], [i, y_[i]]] for i in range(n)]
34
lc = LineCollection(segments, zorder=0)
35
lc.set_array(np.ones(len(y)))
36
lc.set_linewidths(0.5 * np.ones(n))
37
38
fig = plt.figure()
39
plt.plot(x, y, 'r.', markersize=12)
40
plt.plot(x, y_, 'g.-', markersize=12)
41
plt.plot(x, lr.predict(x[:, np.newaxis]), 'b-')
42
plt.gca().add_collection(lc)
43
plt.legend(('Data', 'Isotonic Fit', 'Linear Fit'), loc='lower right')
44
plt.title('Isotonic regression')
45
plt.show()
Copied!