之前研究完分類的邏輯回歸,繼續搞一下線性回歸看看。線性回歸在資料探勘領域應也是非常常見,即根據現有的資料集(行向量組成的矩陣),(訓練)模擬出乙個合適的規律(函式),來推測任何新給出的資料組合(向量)應該得到的值。
具體的描述可以參見各種部落格,怎麼推導的看來看去一知半解,但總而言之結果也簡單,就是計算得到乙個「適當」的多元線性函式y=a0+a1*x1+a2*x2+a3*x3+…+ak*xk。我就不在這裡ctrl+v了。下面只看看**上如何整合。
weka中有對應的線性回歸linearregression。使用起來道理也一樣,就是先構造模型,然後使用;使用時就是構造乙個instance,然後用classifyinstance函式來得到**值。
訓練模型
static abstractclassifier trainmodel(string arfffile, int classindex) throws exception
我使用了ibm技術部落格上的乙個資料樣本(根據房子的面積、房間數、浴室數等,**房子的房價):
@relation house
@attribute housesize numeric
@attribute lotsize numeric
@attribute bedrooms numeric
@attribute granite numeric
@attribute bathroom numeric
@attribute sellingprice numeric
@data
3529,9191,6,0,0,205000
3247,10061,5,1,1,224900
4032,10150,5,0,1,197900
2397,14156,4,1,0,189900
2200,9600,4,0,1,195000
3536,19994,6,1,1,325000
2983,9365,5,0,1,230000
但有一點讓我比較困惑,就是如何構造乙個資料例項,用來作為模型**的引數(自變數向量)。因為classifyinstance函式,是接收乙個資料例項的(即自變數向量)weka.core.instance,而且搜尋看到人家是這樣構造的:
instance ins = new weka.core
.instance(numoffields);
但實際上這個根本編譯不過,找了原因:weka.core.instance是乙個inte***ce!(難道早期的版本instance是乙個可以例項化的類嗎?)
在weka api文件 找找,還是可以看到有其實現類的。
這樣一來,**就可以寫了:
用模型來**
public static void main(string args) throws exception
執行一下:
price: 131311.66927984258
感興趣看看這個模型是怎麼樣的,可以列印出模型求解出來的各個係數。
linearregression linear = new linearregression();
......
for (double coef : linear.coefficients())
執行一下看看,可以得到:
-26.688240074108368
7.055124244983151
43166.07667227803
0.042292.09008972738
0.0-21661.120845270096
有兩個係數是0,對應arff檔案可以得知,granite 是對結果沒有影響的。第二個0的係數,是不是對應了price**的位置,因為price是被**的因變數,所以係數也一定為0。
因此這個模型的解讀是:
sellingprice =
-26.6882 * housesize +
7.0551 * lotsize +
43166.0767 * bedrooms +
42292.0901 * bathroom +
-21661.1208
在Java中使用weka 入門
本文介紹如何使用weka構建特徵向量,訓練分類器,測試分類器,使用分類器。第一步 用特徵表達問題 屬性 這一步相當於構建乙個arff檔案 我們先把特徵放入weka.core.fastvector中 每個特徵都包含在weka.core.attribute類中 現在我們有兩個numeric 特徵,乙個 ...
Weka學習之用java構建ARFF檔案
arff是weka支援的檔案型別 我們可以通過讀取arff檔案獲取資料,進而執行weka進行資料的分析,但是由於某些需求的原因,我們需要連線資料庫對arff進行動態的新增,構建我們需要的instances 我們可以粗略的理解乙個instances對應乙個arff檔案,如下,如果不清楚arff檔案格式...
Springboot整合Redis做快取
redis安裝參考 redis安裝 linux修改redis配置檔案及防火牆的更改參考 linux防火牆更改 redis配置檔案修改 在專案中引入redis的包 org.springframework.boot groupid spring boot starter data redis artif...