【Python-ML】SKlearn库RANSAC拟合高鲁棒性回归模型
生活随笔
收集整理的這篇文章主要介紹了
【Python-ML】SKlearn库RANSAC拟合高鲁棒性回归模型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
# -*- coding: utf-8 -*-
'''
Created on 2018年1月24日
@author: Jason.F
@summary: 有監督回歸學習-RANSAC擬合高魯棒性回歸模型
高魯棒性線性回歸器是一種清楚異常值的學習模型,采用隨機抽樣一致性(RANdom SAmple Consensus,RANSAC),使用數據的內點(inlier,數據集的子集)進行回歸模型的擬合
算法流程:
1)從數據集中隨機抽取樣本構建內點集合來擬合模型
2)使用剩余數據對上一步得到的模型進行測試,并將落差在預定公差范圍內的樣本點增至內點集合中
3)使用全部的內點集合再次進行模型的擬合
4)使用內點集合來估計模型的誤差
5)如果模型性能達到設定的閾值或迭代達到預定次數,則算法終止,否則跳轉到第一步
使用RANSAC降低數據集中異常點的潛在影響,但不確定剔除掉異常數據對預測性能存在的影響。
'''
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#導入波士頓房屋數據集
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#房間數
y=df['MEDV'].values#房間價格
#模型訓練
ransac=RANSACRegressor(LinearRegression(),max_trials=100,#最大迭代次數min_samples=50,#最小抽取的內點樣本數量residual_metric=lambda x:np.sum(np.abs(X),axis=1),#計算擬合曲線與樣本點垂直距離的絕對值residual_threshold=5.0,#與擬合曲線距離小于該閾值的是內點,加入到下一輪訓練集中,與具體問題有關,目前有能夠自動選出適宜的內點閾值方法random_state=0)
ransac.fit(X,y)
#獲取內點和異常點集合
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_)
總結
以上是生活随笔為你收集整理的【Python-ML】SKlearn库RANSAC拟合高鲁棒性回归模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python-ML】SKlearn库线
- 下一篇: 【正一专栏】《神秘巨星》总有一种真诚让你