#向量化运算
import matplotlib as mpl
mpl.rcParams['agg.path.chunksize'] = 1000000
import numpy as np
import matplotlib.pyplot as plt
m=100
x=np.random.random(size=m)
y=x*2.0+3.0+np.random.normal(size=m) #带有噪声数据的线性相关数据
plt.scatter(x,y,color="red")
plt.show()
#波士顿房产数据集合
from sklearn import datasets
b=datasets.load_boston()
print(b.DESCR)
print(b.feature_names)
x=b.data[:,5] #取第五列的数据,房屋的数目与房价的关系
y=b.target
#输出y目标值小于50时的样本数据
x=x[y<50.0]
y=y[y<50.0]
plt.scatter(x,y)
plt.show()
#将数据进行分为测试数据集和训练数据集
from sklearn.model_selection import train_test_split
#x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=666)
#回归算法中的评价指标输出MAE和MSE以及R2(开方为RMSE)
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_squared_error
from sklearn.metrics import r2_score
#多元线性回归不需要进行数据统一化
#sklearn中调用多元线性回归算法LinearRegression
#1-1调用各个库
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
#1-2加载数据
boston=datasets.load_boston()
X=boston.data
y=boston.target
x=X[y<50.0]
y=y[y<50.0]
#1-3进行数据的分割训练数据集与测试数据集
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=666)
#1-4建立线性回归模型进行模型训练
from sklearn.linear_model import LinearRegression
L=LinearRegression()
L.fit(x_train,y_train)
#1-5输出模型的各个特征系数与截距
print(L.coef_) #输出多元线性回归算法的各个特征系数
print(L.intercept_) #线性回归输出截距值
y_predict=L.predict(x_test)
#1-6输出回归算法的各个评价指标
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_squared_error,max_error
from sklearn.metrics import r2_score
#输出RMSE均方根误差
print(np.sqrt(mean_squared_error(y_test,y_predict)))
#输出MAE平均绝对误差
print(mean_absolute_error(y_test,y_predict))
#输出最大残余误差绝对
print(max_error(y_test,y_predict))
#输出R2的值,即模型不犯错误的程度,准确拟合度
print(r2_score(y_test,y_predict))
print(L.score(x_test,y_test))
#1-7可视化输出预测曲线与真实值的曲线
plt.plot(y_test)
plt.plot(y_predict)
plt.show()
#1-8输出各个特征的系数权重大小排序
L1=LinearRegression()
L1.fit(x,y)
print(L1.coef_)
print(np.argsort(L1.coef_))#得到从小到大排序的线性回归算法模型
print(boston.feature_names[np.argsort(L1.coef_)]) #输出影响从小到大的特征名称