标签:-- https admin 数据 机器学习 路径 str 分享 sel
这个线性回归的作业需要上传到https://inclass.kaggle.com/c/ml2016-pm2-5-prediction 上面,这是一个kaggle比赛的网站。第一次接触听说这个东西,恰好在京东上有一本刚出来的关于这个的书《Python机器学习及实践:从零开始通往Kaggle竞赛之路》。把我自己写的代码运行保存的结果提交上去后发现,损失函数值很大,baseline是6,而我的却是8,于是很不心甘,尝试了其他方法无果后,准备利用scikit learn 工具刷刷数据。
具体步骤:
1 安装scikit learn ,在CMD下输入
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就心满意足了。
机器学习 1 linear regression 作业(二)
标签:-- https admin 数据 机器学习 路径 str 分享 sel
原文地址:http://www.cnblogs.com/stevendes1/p/6725883.html