php是最好的语言

python3实现线性回归

转自:https://blog.csdn.net/hzw19920329/article/details/77200475

这里说了线性回归、岭回归、lasso回归来预测数据。上面的原文说得很清楚向前辈致敬,代码就搬运过来,方便自己看

# 线性回归
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model, discriminant_analysis, cross_validation
import sys


def load_data():
    diabetes = datasets.load_diabetes()

    return cross_validation.train_test_split(diabetes.data, diabetes.target, test_size=0.25, random_state=0)

def test_LinearRegression(*data):
    X_train, X_test, y_train, y_test = data
    #通过sklearn的linear_model创建线性回归对象
    linearRegression = linear_model.LinearRegression()
    #进行训练
    linearRegression.fit(X_train, y_train)

    #通过LinearRegression的coef_属性获得权重向量,intercept_获得b的值,这里可以根据权重向量来判断对应得特征的影响,绝对值越大影响越大
    print("权重向量:%s, b的值为:%.2f" % (linearRegression.coef_, linearRegression.intercept_))
    #计算出损失函数的值
    print("损失函数的值: %.2f" % np.mean((linearRegression.predict(X_test) - y_test) ** 2))
    #计算预测性能得分
    print("预测性能得分: %.2f" % linearRegression.score(X_test, y_test))

if __name__ == '__main__':
    #获得数据集
    X_train, X_test, y_train, y_test = load_data()
    #进行训练并且输出预测结果
    test_LinearRegression(X_train, X_test, y_train, y_test)



# 岭回归
# import matplotlib.pyplot as plt
# import numpy as np
# from sklearn import datasets, linear_model, discriminant_analysis, cross_validation
#
# def load_data():
#     diabetes = datasets.load_diabetes()
#     return cross_validation.train_test_split(diabetes.data, diabetes.target, test_size=0.25, random_state=0)
#
# def test_ridge(*data):
#     X_train, X_test, y_train, y_test = data
#     这里的alphas选取下面测试的得分最高的α
#     ridgeRegression = linear_model.Ridge(alphas=0.05)
#     ridgeRegression.fit(X_train, y_train)
#     print("权重向量:%s, b的值为:%.2f" % (ridgeRegression.coef_, ridgeRegression.intercept_))
#     print("损失函数的值:%.2f" % np.mean((ridgeRegression.predict(X_test) - y_test) ** 2))
#     print("预测性能得分: %.2f" % ridgeRegression.score(X_test, y_test))
#
# #测试不同的α值对预测性能的影响
# def test_ridge_alpha(*data):
#     X_train, X_test, y_train, y_test = data
#     alphas = [0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 20, 50, 100, 200, 500, 1000]
#     scores = []
#     for i, alpha in enumerate(alphas):
#         ridgeRegression = linear_model.Ridge(alpha=alpha)
#         ridgeRegression.fit(X_train, y_train)
#         scores.append(ridgeRegression.score(X_test, y_test))
#     return alphas, scores
#
# def show_plot(alphas, scores):
#     figure = plt.figure()
#     ax = figure.add_subplot(1, 1, 1)
#     ax.plot(alphas, scores)
#     ax.set_xlabel(r"$\alpha$")
#     ax.set_ylabel(r"score")
#     ax.set_xscale("log")
#     ax.set_title("Ridge")
#     plt.show()
#
# if __name__ == '__main__':
#     #使用默认的alpha
#     #获得数据集
#     #X_train, X_test, y_train, y_test = load_data()
#     #进行训练并且预测结果
#     #test_ridge(X_train, X_test, y_train, y_test)
#
#     #使用自己设置的alpha
#     X_train, X_test, y_train, y_test = load_data()
#     alphas, scores = test_ridge_alpha(X_train, X_test, y_train, y_test)
#     show_plot(alphas, scores)

# Lasso回归
# import matplotlib.pyplot as plt
# import numpy as np
# from sklearn import datasets, linear_model, discriminant_analysis, cross_validation
#
# def load_data():
#     diabetes = datasets.load_diabetes()
#     return cross_validation.train_test_split(diabetes.data, diabetes.target, test_size=0.25, random_state=0)
#
# def test_lasso(*data):
#     X_train, X_test, y_train, y_test = data
#     #这里的alphas选取下面测试的得分最高的α
#     lassoRegression = linear_model.Lasso(alpha=0.05)
#     lassoRegression.fit(X_train, y_train)
#     print("权重向量:%s, b的值为:%.2f" % (lassoRegression.coef_, lassoRegression.intercept_))
#     print("损失函数的值:%.2f" % np.mean((lassoRegression.predict(X_test) - y_test) ** 2))
#     print("预测性能得分: %.2f" % lassoRegression.score(X_test, y_test))
#
# #测试不同的α值对预测性能的影响
# def test_lasso_alpha(*data):
#     X_train, X_test, y_train, y_test = data
#     alphas = [0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 20, 50, 100, 200, 500, 1000]
#     scores = []
#     for i, alpha in enumerate(alphas):
#         lassoRegression = linear_model.Lasso(alpha=0.05)
#         lassoRegression.fit(X_train, y_train)
#         scores.append(lassoRegression.score(X_test, y_test))
#     return alphas, scores
#
# def show_plot(alphas, scores):
#     figure = plt.figure()
#     ax = figure.add_subplot(1, 1, 1)
#     ax.plot(alphas, scores)
#     ax.set_xlabel(r"$\alpha$")
#     ax.set_ylabel(r"score")
#     ax.set_xscale("log")
#     ax.set_title("Ridge")
#     plt.show()
#
# if __name__=='__main__':
#     X_train, X_test, y_train, y_test = load_data()
#     # 使用默认的alpha
#     # test_lasso(X_train, X_test, y_train, y_test)
#     # 使用自己设置的alpha
#     alphas, scores = test_lasso_alpha(X_train, X_test, y_train, y_test)
#     show_plot(alphas, scores)


作者:xTao 分类:LNMP 浏览:2533 评论:0