機器學習 1 linear regression 做業(二)

這個線性迴歸的做業須要上傳到https://inclass.kaggle.com/c/ml2016-pm2-5-prediction 上面,這是一個kaggle比賽的網站。第一次接觸據說這個東西,剛好在京東上有一本剛出來的關於這個的書《Python機器學習及實踐:從零開始通往Kaggle競賽之路》。把我本身寫的代碼運行保存的結果提交上去後發現,損失函數值很大,baseline是6,而個人倒是8,因而很不心甘,嘗試了其餘方法無果後,準備利用scikit learn 工具刷刷數據。python

具體步驟:app

1 安裝scikit learn  ,在CMD下輸入dom

pip install -U scikit-learn

2 安裝完成後就可使用模型進行預測了,上完整代碼機器學習

 1 # -*- coding: utf-8 -*-
 2 __author__ = 'Administrator'
 3 
 4 
 5 
 6 # -*- coding:UTF-8 -*-
 7 __author__ = 'tao'
 8 
 9 import csv
10 import cv2
11 import sys
12 import numpy as np
13 import matplotlib.pyplot as plt
14 from sklearn import datasets, linear_model
15 import math
16 
17 
18 filename = 'F:/臺灣機器學習/data/train.csv'
19 ufilename = unicode(filename , "utf8") #這一塊主要是由於漢字路徑 也就是python調用open打開文件時,其路徑必需要轉換爲utf-8格式
20 list=[]
21 result=[]
22 row=0
23 colum=0;
24 with open(ufilename, 'r') as f:
25     data = f.readlines()  #dat中全部字符串讀入data
26     for line in data:
27         odom = line.split(',')        #將單個數據分隔開存好
28         colum=len(odom)
29         if 'PM2.5'in odom:
30             lists= map(int, odom[3:12])#第三個開始開始數據  一直取9個數
31             results= map(int, odom[12:13])#取第10個數
32             list.append(lists)
33             result.append(results)
34             # print odom
35         row=row+1
36 
37 #print("原始數據是:{0}行 :{1}列 的數據".format(row, colum))
38 print("有{0}個訓練數據".format(len(list)))
39 
40 
41 ###
42 
43 regr = linear_model.LinearRegression() 44 regr.fit(list, result) #這裏就是在訓練模型了 45 print(' intercept: \n', regr. intercept_) #這就是w0,常數項 46 print('Coefficients: \n', regr.coef_) #這就是w1,常數項
47 
48 b_0=regr. intercept_
49 th =regr.coef_;
50 
51 print("-訓練獲得的權值以下--")
52 print" %10.5f %10.5f  %10.5f %10.5f   %10.5f  %10.5f  %10.5f %10.5f   %10.5f  %10.5f \n" %(b_0,th[0][0],th[0][1],th[0][2],th[0][3],th[0][4],th[0][5],th[0][6],th[0][7],th[0][8])
53 
54 #測試訓練集
55 for k in range(len(list)):
56     xset = np.array(list[k])
57     nptresult= np.array(result[k])
58     # print("預測數據{0}".format( b_0 + np.dot(th,xset)))
59     # print("真實數據{0}".format(nptresult))
60     error= b_0 + np.dot(th,xset)-nptresult
61     print("訓練集的實際偏差{0}".format(error))
62 
63 
64 #讀取測試集數據
65 testfilename = 'F:/臺灣機器學習/data/test_X.csv'
66 utestfilename = unicode(testfilename , "utf8") #這一塊主要是由於漢字路徑 也就是python調用open打開文件時,其路徑必需要轉換爲utf-8格式
67 testlist=[]
68 testrow=0
69 testcolum=0;
70 with open(utestfilename, 'r') as f:
71     data = f.readlines()  #dat中全部字符串讀入data
72     for line in data:
73         odom = line.split(',')        #將單個數據分隔開存好
74         colum=len(odom)
75         if 'PM2.5'in odom:
76             testlists= map(int, odom[2:11])#第三個開始開始數據  一直取9個數
77             testlist.append(testlists)
78             # print odom
79         testrow=row+1
80 
81 print("測試數據是:{0}行 :{1}列 的數據".format(testrow, testcolum))
82 print("有{0}個測試數據".format(len(testlist)))
83 print(testlist)
84 
85 #輸出最後的測試結果
86 csvfile = file('d:\\csv_result.csv', 'wb')
87 writer = csv.writer(csvfile)
88 writer.writerow(['id', 'value'])
89 for k in range(len(testlist)):
90     id_list=[]
91     xset = np.array(testlist[k])
92     result= b_0 +np.dot(th,xset)
93     int_result = int(result)
94     if(int_result<0):
95         int_result=0
96     id_list = [('id_{0}'.format(k), '{0}'.format(int_result))]
97     print(id_list)
98     writer.writerows(id_list)
99 csvfile.close()

獲得的程序函數

-訓練獲得的權值以下--
bo 1.86833  wo -0.07357  w1 0.08100  w2 0.16498  w3-0.25133 w4 -0.05844 w5 0.67979 w5 -0.66656 w6 -0.12575 w7 1.22998 工具

 

而後試了試:學習

from sklearn.linear_model import Ridge
from sklearn.linear_model import Lasso
from sklearn.ensemble import GradientBoostingRegressor as GBR
下面三種迴歸方法,都沒有達到好的排名。。。囧,
#regr = linear_model.LinearRegression()
#regr = linear_model.Ridge()
# regr = linear_model.Lasso()
regr =  GBR()

regr.fit(list, result) #這裏就是在訓練模型了

print(' intercept: \n', regr. intercept_) #這就是w0,常數項
print('Coefficients: \n', regr.coef_) #這就是w1,常數項
###

 error=  regr.predict(xset)-nptresult

參考博客:http://blog.csdn.net/sa14023053/article/details/51817650測試

算了,超過baseline就心滿意足了。網站

相關文章
相關標籤/搜索