通用範例/範例三: Isotonic Regression

http://scikit-learn.org/stable/auto_examples/plot_isotonic_regression.html

迴歸函數採用遞增函數。

  • y[] are inputs (real numbers)
  • y_[] are fitted

這個範例的主要目的:

比較

  • Isotonic Fit
  • Linear Fit

(一) Regression「迴歸」

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

(二) Linear Regression「線性迴歸」

迴歸函數採用線性函數。誤差採用平方誤差。

class sklearn.linear_model.LinearRegression

二維數據,迴歸函數是直線。

Ex 3: Isotonic Regression - 图1

(三) Isotonic Regression「保序迴歸」

具有分段迴歸的效果。迴歸函數採用遞增函數。

class sklearn.isotonic.IsotonicRegression

採用平方誤差,時間複雜度 O(N) 。

Ex 3: Isotonic Regression - 图2

(四) 完整程式碼

Python source code: plot_isotonic_regression.py

http://scikit-learn.org/stable/auto_examples/plot_isotonic_regression.html

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

Ex 3: Isotonic Regression - 图3