【Python-ML】SKlearn库RANSAC拟合高鲁棒性回归模型
生活随笔
收集整理的這篇文章主要介紹了
【Python-ML】SKlearn库RANSAC拟合高鲁棒性回归模型
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
# -*- coding: utf-8 -*-
'''
Created on 2018年1月24日
@author: Jason.F
@summary: 有監(jiān)督回歸學(xué)習(xí)-RANSAC擬合高魯棒性回歸模型
高魯棒性線性回歸器是一種清楚異常值的學(xué)習(xí)模型,采用隨機(jī)抽樣一致性(RANdom SAmple Consensus,RANSAC),使用數(shù)據(jù)的內(nèi)點(diǎn)(inlier,數(shù)據(jù)集的子集)進(jìn)行回歸模型的擬合
算法流程:
1)從數(shù)據(jù)集中隨機(jī)抽取樣本構(gòu)建內(nèi)點(diǎn)集合來擬合模型
2)使用剩余數(shù)據(jù)對(duì)上一步得到的模型進(jìn)行測試,并將落差在預(yù)定公差范圍內(nèi)的樣本點(diǎn)增至內(nèi)點(diǎn)集合中
3)使用全部的內(nèi)點(diǎn)集合再次進(jìn)行模型的擬合
4)使用內(nèi)點(diǎn)集合來估計(jì)模型的誤差
5)如果模型性能達(dá)到設(shè)定的閾值或迭代達(dá)到預(yù)定次數(shù),則算法終止,否則跳轉(zhuǎn)到第一步
使用RANSAC降低數(shù)據(jù)集中異常點(diǎn)的潛在影響,但不確定剔除掉異常數(shù)據(jù)對(duì)預(yù)測性能存在的影響。
'''
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from sklearn.linear_model import RANSACRegressor
from sklearn.linear_model.base import LinearRegression#導(dǎo)入波士頓房屋數(shù)據(jù)集
df=pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data',header=None,sep='\s+')
df.columns=['CRIM','ZM','INDUS','CHAS','NOX','RM','AGE','DIS','RAD','TAX','PTRATIO','B','LSTAT','MEDV']
X=df[['RM']].values#房間數(shù)
y=df['MEDV'].values#房間價(jià)格
#模型訓(xùn)練
ransac=RANSACRegressor(LinearRegression(),max_trials=100,#最大迭代次數(shù)min_samples=50,#最小抽取的內(nèi)點(diǎn)樣本數(shù)量residual_metric=lambda x:np.sum(np.abs(X),axis=1),#計(jì)算擬合曲線與樣本點(diǎn)垂直距離的絕對(duì)值residual_threshold=5.0,#與擬合曲線距離小于該閾值的是內(nèi)點(diǎn),加入到下一輪訓(xùn)練集中,與具體問題有關(guān),目前有能夠自動(dòng)選出適宜的內(nèi)點(diǎn)閾值方法random_state=0)
ransac.fit(X,y)
#獲取內(nèi)點(diǎn)和異常點(diǎn)集合
inlier_mask = ransac.inlier_mask_
outlier_mask = np.logical_not(inlier_mask)
line_X = np.arange(3,10,1)
line_y_ransac = ransac.predict(line_X[:,np.newaxis])
plt.scatter(X[inlier_mask],y[inlier_mask],c='blue',marker='o',label='Inliers')
plt.scatter(X[outlier_mask],y[outlier_mask],c='lightgreen',marker='s',label='Outliers')
plt.plot(line_X,line_y_ransac,color='red')
plt.xlabel('Average number of roosm[RM]')
plt.ylabel('Price in $1000\'s [MEDV]')
plt.legend(loc='upper left')
plt.show()
#顯示模型的斜率和截距
print ('Slope:%.3f'%ransac.estimator_.coef_[0])
print ('Intercept:%.3f'%ransac.estimator_.intercept_)
總結(jié)
以上是生活随笔為你收集整理的【Python-ML】SKlearn库RANSAC拟合高鲁棒性回归模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python-ML】SKlearn库线
- 下一篇: 【正一专栏】《神秘巨星》总有一种真诚让你