sklearn线性回归学习中遇到的问题及解决方法

来源:互联网 发布:sqlserver触发器实例 编辑:程序博客网 时间:2024/05/19 23:59

    最近因为做毕业设计开始学习机器学习,这一周主要是对数据进行操作做出可视化的图来分析,另外就是学习论文中提到的一些机器学习算法。

    现在仅仅是利用sklearn库中的现有方法实现训练和测试,但是由于手中现有的数据比较复杂,并不适合用线性回归的方法去拟合,所以效果并不理想。

1.首先是原始数据格式的问题:

    我拿到的数据是csv格式的,用reader读进来以后是用‘\t’对每个字符分隔,每行都是list。但是这样就不能用list[1][1]这种方法对单独某条记录中的一个字段进行处理,所以就进行如下的步骤:

reader=csv.reader(file(csvfile,'rb'))tmp=[]    for line in reader:    str="".join(line).split('\t')    tmp.append(str)

这样就变成每行的字段之间用‘,’进行分隔,可以单独提取某个字段了。但是提取的表示如下:

for i in tmp:        if i[0].find(day)<>-1:            numberoflines+=1

相当于把一行看成一个字符串数组。

2.一个去除重复的小技巧:

label0=list(set(label))#得到观测日期的不重复记录
3.无论哪一种模型进行fit的时候输入都要是列向量

输入是类似于列向量的,输出类似于行向量,看它们各自的shape就是: 
输出:y.shape ——>(1,) 
输入:x.shape——->(m,1) #m是一个数字 
而我的数据是行向量,所以需要转置

date=mat(date).T    #一开始没注意数据格式 fit的参数需要是矩阵格式minprice=mat(minprice).T   date_train=date[:-10]  date_test=date[-10:]minprice_train=minprice[:-10]minprice_test=minprice[-10:]

所以在最后求残差平方和和方差就要再转换回去,不然两个大小不一致

print ("Residual sum of squares:%.2f" %mean((model.predict(date_test)-list(minprice_test.T))**2))#残差平方和print ('Variance score: %.2f' % model.score(date_test,minprice_test))#方差


4.日期数据做横轴显示问题和date2num,num2date方法

import pylab as pl

import matplotlib.ticker as tickerimport matplotlib.dates as mdatesfrom datetime import datetime


如果日期数据是自变量就要把它变成float数据进行处理 用date2num方法

date=pl.datestr2num(date)
下面是显示横轴日期:

fig=pl.figure(figsize=(12,6))plt.scatter(date_test,minprice_test,  color='black')plt.plot(date_test, regr.predict(date_test), color='blue',linewidth=3)ax=fig.gca()    ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))plt.xticks(())plt.yticks(())plt.show()


5.几种线性回归方法

from sklearn import datasets,linear_model,metrics
def prediction(date_train,minprice_train,date_test,minprice_test):#普通线性回归    # minprice,date=findminprice(csvfile,'2015-03-10')    # date=pl.datestr2num(date)    # date=mat(date).T    #一开始没注意数据格式 fit的参数需要是矩阵格式    # minprice=mat(minprice).T           # print date        regr=linear_model.LinearRegression()    regr.fit(date_train,minprice_train)    # predict_outcome = regr.predict(pl.datestr2num(predate))    fig=pl.figure(figsize=(12,6))    plt.scatter(date_test,minprice_test,  color='black')    plt.plot(date_test, regr.predict(date_test), color='blue',linewidth=3)    ax=fig.gca()        ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))    plt.xticks(())    plt.yticks(())    plt.show()    print("Residual sum of squares: %.2f"      % mean((regr.predict(date_test) - list(minprice_test.T)) ** 2))    # Explained variance score: 1 is perfect prediction    print('Variance score: %.2f' % regr.score(date_test, minprice_test))def ridgeprediction(date_train,minprice_train,date_test,minprice_test):#Ridge线性回归    clf=linear_model.Ridge(alpha=1.0)    clf.fit(date_train,minprice_train)    fig=pl.figure(figsize=(12,6))    plt.scatter(date_test,minprice_test,  color='black')        plt.plot(date_test, clf.predict(date_test), color='blue',linewidth=3)    ax=fig.gca()        ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))    plt.xticks(())    plt.yticks(())    plt.show()           print("Residual sum of squares: %.2f"      % mean((clf.predict(date_test) - list(minprice_test.T)) ** 2))    # Explained variance score: 1 is perfect prediction    print('Variance score: %.2f' % clf.score(date_test, minprice_test))def cartprediction(date_train,minprice_train,date_test,minprice_test):#CART线性回归    model=DecisionTreeClassifier()    model.fit(date_train,minprice_train)    fig=pl.figure(figsize=(12,6))    plt.scatter(date_test,minprice_test,  color='black')        plt.plot(date_test, model.predict(date_test), color='blue',linewidth=3)    ax=fig.gca()        ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))    plt.xticks(())    plt.yticks(())    plt.show()    # print model.predict(date_test)    # print minprice_test.T    # print model.predict(date_test)-minprice_test.T    # a=(model.predict(date_test)-minprice_test)**2          print ("Residual sum of squares:%.2f" %mean((model.predict(date_test)-list(minprice_test.T))**2))#残差平方和    print ('Variance score: %.2f' % model.score(date_test,minprice_test))#方差





0 0
原创粉丝点击