import csv import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl import pandas as pd from sklearn.model_selection import train_test_split # 分割数据集(训练集&测试集) from sklearn.linear_model import LinearRegression # 调入sklearn算法库 path = '/Users/yee/Desktop/Advertising.csv' # 1 加载数据集 data = pd.read_csv(path) # TV、Radio、Newspaper、Sales x = data[['TV', 'Radio', 'Newspaper']] # 建立特征矩阵 200 * 4 y = data['Sales'] # 建立标签矩阵 200 * 1 print(x) #2 从图表查看数据的分布走向,呈线性分布 # 设置字符集,防止中文乱码 # mpl.rcParams["font.sans-serif"] = [u'simHei'] #Win自带的字体 plt.rcParams['font.sans-serif'] = ['Arial Unicode MS'] # Mac自带的字体 mpl.rcParams["axes.unicode_minus"] = False plt.plot(data['TV'], y, 'ro', label='TV') plt.plot(data['Radio'], y, 'g^', label='Radio') plt.plot(data['Newspaper'], y, 'mv', label='Newspaer') plt.title("线性回归对于多媒体与广告的销售数据", fontsize=16) plt.legend(loc='lower right') plt.grid() plt.show() #3 分割训练集和测试集,默认是0.25作为测试集 x_train, x_test, y_train, y_test = train_test_split(x, y,test_size=0.25, random_state=1) print(len(x_train), len(y_train)) #4 调用线性回归算法训练模型 linreg = LinearRegression() model = linreg.fit(x_train, y_train) #传入训练数据 print("权重值为:",linreg.coef_) print("截距项为:",linreg.intercept_) #5 验证模型的准确度 y_hat = linreg.predict(np.array(x_test)) mse = np.average((y_hat - np.array(y_test)) ** 2)/2 #测试结果和真实值的差异 rmse = np.sqrt(mse) #开平方 print("mse = " , mse) print("rmse = " , rmse) #6 图表展示模型推测的数据和真实数据的对比 t = np.arange(len(x_test)) plt.plot(t, y_test, 'r-', linewidth=2, label='Test') plt.plot(t, y_hat, 'g-', linewidth=2, label='Predict') plt.title("线性回归对于多媒体与广告的销售数据", fontsize=16) plt.legend(loc='upper right') plt.grid() plt.show()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)