建模的流程大三步:数据清理处理,模型选择,检验,下面以线性回归为例:
导入数据
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets,linear_model
diabetes=datasets.load_diabetes() #加载数据
diabetes_X=diabetes.data[:,np.newaxis,2] #嵌套列表转化成列表
通常在这一步需要看数据的类型,分布,对极值,缺失值做处理。
生成训练集和测试集
diabetes_X_train=diabetes_X[:-20] #剔除后面20个作为训练集
diabetes_X_test=diabetes_X[-20:] #剔除前面20个作为测试集合
diabetes_y_train=diabetes.target[:-20]
diabetes_y_test=diabetes.target[-20:]
建模与拟合
regr=linear_model.LinearRegression() #创建线性回归对象
regr.fit(diabetes_X_train,diabetes_y_train) #将训练集放进去拟合
模型检验
Python的很多检验都都需要自己计算
print("Coefficients:\n",regr.coef_) #输出系数
print("Residual sum of sqares:%.2f"
%np.mean((regr.predict(diabetes_X_test)-diabetes_y_test)**2)) #输出残差平方和
print("Variance score:%.2f" %regr.score(diabetes_X_test,diabetes_y_test)) #R^2
实际结果:
做拟合图
plt.scatter(diabetes_X_test,diabetes_y_test,color='black') #测试集散点图
plt.plot(diabetes_X_test,regr.predict(diabetes_X_test),color='blue',linewidth=3) #拟合方程
plt.title("The Linear Model")
plt.show()
图:
总体上来说,Python做数据建模对统计原理的要求会更高些,因为在做检验的时候需要你计算出来的,不像R直接出来,只是需要解读判断。
源码:
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets,linear_model
diabetes=datasets.load_diabetes() #加载数据
diabetes_X=diabetes.data[:,np.newaxis,2] #嵌套列表转化成列表
diabetes_X_train=diabetes_X[:-20] #剔除后面20个作为训练集
diabetes_X_test=diabetes_X[-20:] #剔除前面20个作为测试集合
diabetes_y_train=diabetes.target[:-20]
diabetes_y_test=diabetes.target[-20:]
regr=linear_model.LinearRegression() #创建线性回归对象
regr.fit(diabetes_X_train,diabetes_y_train) #将训练集放进去拟合
print("Coefficients:\n",regr.coef_) #输出系数
print("Residual sum of sqares:%.2f"
%np.mean((regr.predict(diabetes_X_test)-diabetes_y_test)**2)) #输出残差平方和
print("Variance score:%.2f" %regr.score(diabetes_X_test,diabetes_y_test)) #R^2
plt.scatter(diabetes_X_test,diabetes_y_test,color='black') #测试集散点图
plt.plot(diabetes_X_test,regr.predict(diabetes_X_test),color='blue',linewidth=3) #拟合方程
plt.title("The Linear Model")
plt.show()