算法-线性回归

import numpy as np
import pandas as pd
import seaborn as sns
from sklearn import linear_model
import matplotlib.pyplot as plt
from sklearn.externals import joblib
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
import sklearn.preprocessing as sp
import sklearn.pipeline as pl
from sklearn.datasets import load_digits
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
'''线性回归,先对已有的数据做测试,然后进行训练,预测值的时候用'''

#例子1:导入数据
lb = load_boston()
df = pd.DataFrame(np.column_stack((lb.data,lb.target)),columns=['CRIM','ZN','INDUS','CHAS','NOX','RM','AGE','DIS','RAD','TAX','PTRATIO','B','LSTAT','MEDV'])
cols = ['LSTAT','INDUS','NOX','RM','MEDV']
# df_score = pd.read_excel('datas/score.xlsx')
#作图:散点图25个小图
def pairpot_analyse():
    """
    散点图
    :return:
    """
    sns.set(style='whitegrid',context='notebook')
    sns.pairplot(df[cols],size=2.5)
    plt.tight_layout()
    plt.show()

#相关图,25个方格图
def heatmap_analyse():
    """
    热相关
    :return:
    """
    # 计算皮尔逊相关系数
    corr = np.corrcoef(df[cols].values.T)
    # 生成热点图
    hm = sns.heatmap(corr,cbar=True,annot=True,square=True,fmt='.2f',annot_kws={'size':15},yticklabels=cols,xticklabels=cols)
    plt.show()



# 例子2
def boston_linear():
    """
    线性回归直接预测房子价格
    :return: None
    """
    #获取数据
    lb = load_boston()
    #分割数据集到训练集和测试集
    x_train,x_test,y_train,y_test = train_test_split(lb.data,lb.target,test_size=0.25)

    # print(y_train,y_test)
    #特征值和目标值是都必须进行标准化处理,实例化两个标准化API
    std_x = StandardScaler()
    x_train = std_x.fit_transform(x_train)
    #用转化训练集的标准归一化测试集
    x_test = std_x.transform(x_test)

    #目标值
    std_y = StandardScaler()
    # -1表示系统自动计算行数
    y_train = std_y.fit_transform(y_train.reshape(-1,1))
    y_test = std_y.transform(y_test.reshape(-1,1))

    #estimator预测
    #正规方程求解方式预测结果
    lr = LinearRegression()
    lr.fit(x_train,y_train)
    # print(lr.coef_)
    #保存训练好的模型
    joblib.dump(lr,'./test.pkl')
    #预测测试集的房子价格
    print(std_y.inverse_transform(y_test[6]))   #房子真实价格
    y_lr_predict = std_y.inverse_transform(lr.predict(np.array([x_test[6]])))   #预估价格

    # y_lr_predict = std_y.inverse_transform(lr.predict(x_test))
    print('正规方程测试集里面每个房子的预估价格:',y_lr_predict)
    # print('正规方程R2评分:',r2_score(std_y.inverse_transform(y_test),y_lr_predict))

图例如下:

把预测的点拟合成一条线,或者符合某个函数标准的线性方程;然后通过已知的值,预测结果。

猜你喜欢

转载自blog.csdn.net/qq_42420425/article/details/82942780
今日推荐