线性回归的模型是:y=theta0*x+theta1 其中theta0,theta1是我们希望得到的系数和截距。
下面是代码实例:
1. 用自定义数据来看看格式:
# -*- coding:utf-8 -*- from sklearn import linear_model from resys.SplitData import * from numpy import * import matplotlib.pyplot as plt ## 注意: ## python线性回归的数据输入格式 ## x的每个值以列表格式存在 x=[[150.0],[200.0],[250.0],[300.0],[350.0],[400.0],[600.0]] y=[6450.0,7450.0,8450.0,9450.0,11450.0,15450.0,18450.0] x_test=800.0 #建模 regr=linear_model.LinearRegression() regr.fit(x,y) regr.score(x,y) #返回系数和截距 print("efficient :n", regr.coef_) print("intercept :n",regr.intercept_) #预测 predicted=regr.predict(x_test) print ("predicted results: n",predicted) # ---------------------------------------------------- # 描出训练点和拟合的直线 def show_linear_line(x,y): regr=linear_model.LinearRegression() regr.fit(x,y) plt.scatter(x,y,color='blue') plt.plot(x,regr.predict(x),color='red',linewidth=4) plt.xticks(()) plt.yticks(()) plt.show() show_linear_line(x,y)
2. 从文件中读取数据:
# -*- coding:utf-8 -*- from sklearn import linear_model from resys.SplitData import * from numpy import * import matplotlib.pyplot as plt ## test是一个数据文件,包含4列,以tab分割 #我们只需要取出第一列来作为x, 第三列作为y #然后把数据再分为两部分,训练集和测试集 data3=open("e:/python/movie_ratings/test.dat","r") xlist=[] ylist=[] for data in data3: xlist.append(''.join(str(data.split('\t')[0]))) ylist.append(''.join(str(data.split('\t')[2]))) data3.close() xlist_train,xlist_test=SplitData(xlist, 7, 3, 10) #SplitData是我自定义的切分函数 ylist_train,ylist_test=SplitData(ylist, 7, 3, 10) x_train=[] #这是第一种,把['1','2','3'] 转化为需要的[[1.0],[2.0],[3.0]]的方法 for i in xlist_train: b=[] b.append(float(i)) x_train.append(b) x_test=[] #第二种,更简便明了一些 for i in xlist_test: x_test.append([float(i)]) y_train=[float(i) for i in ylist_train] #y格式要求很简单,[1.0, 2.0, 3.0]即可 #建模 linear=linear_model.LinearRegression() linear.fit(x_train,y_train) linear.score(x_train,y_train) # 返回系数和截距 print('Coefficient:n',linear.coef_) print('Intercept:n',linear.intercept_) #预测 predicted=linear.predict(x_test) print("predicted results:n",predicted) # ---------------------------------------------------- # 描出训练集;及拟合的直线 def show_linear_line(x,y): regr=linear_model.LinearRegression() regr.fit(x,y) plt.scatter(x,y,color='blue') plt.plot(x,regr.predict(x),color='red',linewidth=4) plt.xticks(()) plt.yticks(()) plt.show() show_linear_line(x_train,y_train)