1.1 导入相应的包和数据
%matplotlib inline
#在jupyter里面需要加入此命令显示图
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import RANSACRegressor, LinearRegression, TheilSenRegressor
from sklearn.metrics import explained_variance_score, mean_absolute_error, mean_squared_error, median_absolute_error, r2_score
from sklearn.svm import SVR
from sklearn.linear_model import Ridge,Lasso,ElasticNet,BayesianRidge
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.cross_validation import train_test_split
data = pd.read_csv('../cement_data.csv')
# 查看数据记录的长度,共1030行
print(len(data))
# 查看前五行数据
data.head()
数据展示如下:
重新为列标签命名:
data.columns = ['cement_component', 'furnace_slag', 'flay_ash', 'water_component', 'superplasticizer', 'coarse_aggregate', 'fine_aggregate', 'age', 'concrete_strength']
data.head()
1.2 特征探索
先用可视化方法查看各个变量分别和concrete_strength的关系,结果可看到很多的自变量都存在大量0值,忽略0值看到cement_component、superplasticizer和concrete strength呈正相关关系,Flay_Ash、water component、coarse aggregate、fine aggregate和concrete strength呈负相关关系,age和concrete strength没有明显的关系,而且年份呈现离散趋势。
plt.figure(figsize=(15,10.5))
plot_count = 1
for feature in list(data.columns)[:-1]:
plt.subplot(3,3,plot_count)
plt.scatter(data[feature], data['concrete_strength'])
plt.xlabel(feature.replace('_',' ').title())
plt.ylabel('Concrete strength')
plot_count+=1
plt.show()
接下来对年份进行分段,查看每个年份段下各个特征跟因变量之间的pearson相关系数。从上面的年份图可以看到年份大致在100以下、100-300、300以上,所以进行以下的年份区分,并加入age_level列。
data.loc[data['age'] <= 30, 'age_level'] = '<30'
data.loc[((data['age'] <= 100) & (data['age'] > 30)), 'age_level'] = '30<age<100'
data.loc[((data['age'] <= 300) & (data['age'] > 100)), 'age_level'] = '100<age<300'
data.loc[data['age'] > 300, 'age_level'] = 'age>300'
data.head(20)
对比未对年份分组的pearson系数和对年份分组的pearson系数。未对年份分组的pearson系数表中显示,cement_component、superplasticizer、furnace_slag和concrete_strength呈现正相关关系,water_component、coarse_aggregate、fine_aggregate、flay_ash和concrete_strength呈现负相关关系。
对年份分组的pearson系数表中显示,在100
all_correlations = data.corr(method='pearson')
print(all_correlations)
print('---------------------------------------------------------------------------------------')
column = ['cement_component', 'furnace_slag', 'flay_ash', 'water