首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

没事也来跑跑代码吧

数据准备

# 从原始数据中分离输入特征x和输出y

y = data['MEDV'].values

X = data.drop('MEDV', axis = 1)

当数据量比较大时,可用train_test_split从训练集中分出一部分做校验集; 样本数目较少时,建议用交叉验证 在线性回归中,留一交叉验证有简便计算方式,无需显式交叉验证。

#将数据分割训练数据与测试数据

from sklearn.cross_validation import train_test_split

# 随机采样25%的数据构建测试样本,其余作为训练样本

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33, test_size=0.2)

数据预处理/特征工程

# 数据标准化

from sklearn.preprocessing import StandardScaler

# 分别初始化对特征和目标值的标准化器

ss_X = StandardScaler()

ss_y = StandardScaler()

# 分别对训练和测试数据的特征以及目标值进行标准化处理

X_train = ss_X.fit_transform(X_train)

X_test = ss_X.transform(X_test)

#y_train = ss_y.fit_transform(y_train)

#y_test = ss_y.transform(y_test)

y_train = ss_y.fit_transform(y_train.reshape(-1, 1))

y_test = ss_y.transform(y_test.reshape(-1, 1))

确定模型类型

# 尝试缺省参数的线性回归

#class sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=1)

from sklearn.linear_model import LinearRegression

# 使用默认配置初始化

lr = LinearRegression()

# 训练模型参数

lr.fit(X_train, y_train)

# 预测,下面计算score会自动调用predict

lr_y_predict = lr.predict(X_test)

lr_y_predict_train = lr.predict(X_train)

#显示特征的回归系数

lr.coef_

out:

去除数值比较小的变量,有助于模型的准确。

模型评价

# 使用LinearRegression模型自带的评估模块(r2_score),并输出评估结果

#测试集

print 'The value of default measurement of LinearRegression on test is', lr.score(X_test, y_test)

#训练集

print 'The value of default measurement of LinearRegression on train is', lr.score(X_train, y_train)

#在训练集上观察预测残差的分布,看是否符合模型假设:噪声为0均值的高斯噪声

f, ax = plt.subplots(figsize=(7, 5))

f.tight_layout()

ax.hist(y_train - lr_y_predict_train,bins=40, label='Residuals Linear', color='b', alpha=.5);

ax.set_title("Histogram of Residuals")

ax.legend(loc='best');

#还可以观察预测值与真值的散点图

plt.figure(figsize=(4, 3))

plt.scatter(y_train, lr_y_predict_train)

plt.plot([-3, 3], [-3, 3], '--k')#数据已经标准化,3倍标准差即可

plt.axis('tight')

plt.xlabel('True price')

plt.ylabel('Predicted price')

plt.tight_layout()

# 线性模型,随机梯度下降优化模型参数

# 随机梯度下降一般在大数据集上应用,其实本项目不适合用

from sklearn.linear_model import SGDRegressor

# 使用默认配置初始化线

sgdr = SGDRegressor(max_iter=1000)

# 训练:参数估计

sgdr.fit(X_train, y_train)

# 预测

sgdr.coef_

# 使用SGDRegressor模型自带的评估模块,并输出评估结果

print 'The value of default measurement of SGDRegressor on test is', sgdr.score(X_test, y_test)

print 'The value of default measurement of SGDRegressor on train is', sgdr.score(X_train, y_train)

#这里由于样本数不多,SGDRegressor可能不如LinearRegression。 sklearn建议样本数超过10万采用SGDRegressor

正则化的线性回归:岭回归/L2正则

from sklearn.linear_model import RidgeCV

alphas = [0.01, 0.1, 1, 10,20, 40, 80,100]

reg = RidgeCV(alphas=alphas, store_cv_values=True)

reg.fit(X_train, y_train)

mse_mean = np.mean(reg.cv_values_, axis = 0)

plt.plot(np.log10(alphas), mse_mean.reshape(len(alphas),1))

plt.plot(np.log10(reg.alpha_)*np.ones(3), [0.28, 0.29, 0.30])

plt.xlabel('log(alpha)')

plt.ylabel('mse')

plt.show()

print ('alpha is:', reg.alpha_)

reg.coef_

# 使用LinearRegression模型自带的评估模块(r2_score),并输出评估结果

print 'The value of default measurement of RidgeRegression is', reg.score(X_test, y_test)

正则化的线性回归 Lasso/L1正则

from sklearn.linear_model import LassoCV

alphas = [0.01, 0.1, 1, 10,100]

lasso = LassoCV(alphas=alphas)

lasso.fit(X_train, y_train)

mses = np.mean(lasso.mse_path_, axis = 1)

plt.plot(np.log10(lasso.alphas_), mses)

plt.xlabel('log(alpha)')

plt.ylabel('mse')

plt.show()

print ('alpha is:', lasso.alpha_)

lasso.coef_

# 使用LinearRegression模型自带的评估模块(r2_score),并输出评估结果

print 'The value of default measurement of Lasso Regression on test is', lasso.score(X_test, y_test)

print 'The value of default measurement of Lasso Regression on train is', lasso.score(X_train, y_train)

干货来咯:经过两天的摸索,整理出来的问题解决思路是:

一、判断问题类型,导入不同的工具包。

本例的工具包有:numpy、pandas、matplotlib.pyplot、seaborn。至于如何判断需要哪些工具包来解决问题,我想经过不断的学习,是应该会明白的。

二、读取数据,了解数据的基本信息,查看是否有空值并处理。

三、数据探索,了解各数据的统计特性。

1.单变量分布分析。

2.数据相关性,即考察每两个特征之间的相关性。

四、数据准备(可能需要丢弃部分数据)。

五、数据预处理、特征工程,数据标准化。

六、确定模型类型

1.尝试缺省参数的线性回归

1.1模型评价

自带评估模块

高斯分布

预测值与真值的散点图

2.正则化的线性回归(L2正则 --> 岭回归)

引入模型

输出图像、array

自带模型评估

3.正则化的线性回归(L1正则 --> Lasso)

引入模型

输出图像、array

自带模型评估

总结起来就是:固定格式,灵活调用,工具自取,随用随估。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171213G0J9F500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com