线性回归算法原理及项目练习

# 工作年限与收入之间的散点图
# 导入第三方模块
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 导入数据集
income = pd.read_csv('Salary_Data.csv')
# 绘制散点图
sns.lmplot(x = 'YearsExperience', y = 'Salary', data = income, ci = None)
# 显示图形
plt.show()
# 获取样本的数据量
n = income.shape[0]
# 计算自变量、因变量、自变量平方、自变量与因变量乘积的和
sum_x = income.YearsExperience.sum()
sum_y = income.Salary.sum()
sum_x2 = income.YearsExperience.pow(2).sum()
xy = income.YearsExperience * income.Salary
sum_xy = xy.sum()

# 根据公式计算回归模型的参数
b = (sum_xy-sum_y/n)/(sum_x2-sum_x**2/n)
a = income.Salary.mean() - b*income.YearsExperience.mean()
# 打印结果
print('回归参数a:',a)
print('回归参数b:',b)

波士顿房价预测:

import matplotlib.pyplot as plt  #导入matplotlib库
import numpy as np  #导入numpy库
import pandas as pd  #导入pandas库
from sklearn.datasets import load_boston  #从sklearn数据集库导入boston数据
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
boston=load_boston() #从读取的房价数据存储在boston变量中
print(boston.keys()) #打印boston包含元素

# 查看data数据及其数据格式
print(type(boston.data))
print(boston.data)

# 将data数据格式转换成DataFrame格式,这样更便于查看数据
bos = pd.DataFrame(boston.data)
# 查看第六列的数据
print(bos[5].head())


# 查看target数据
print(boston.target)

# 将target数据转换成DataFrame格式,并赋值给一个变量
bos_target = pd.DataFrame(boston.target)

# 查看赋值后的前几条数据
print(bos_target.head())


#解决中文显示问题
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
# 选取RM变量值,将其设定为X
X = bos.iloc[:,5:6]  #选取data中的RM变量

# 设定target为y
y =bos_target
# 绘制散点图
plt.scatter(X, y)
# 设定x轴的标签为房屋平均房间数
plt.xlabel('房屋平均房间数')
# 设定y轴的标签为房屋价格
plt.ylabel('房屋价格')
# 设置标题为平均房间数与价格的关系
plt.title('平均房间数与价格的关系')
# 展示图形
#plt.show()
X=np.array(X.values)
y=np.array(y.values)
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25)

print(X_train.shape,X_test.shape,y_train.shape,y_test.shape)
lr=LinearRegression()
lr.fit(X_train,y_train)
# intercept_变量中保存着截距
print('求解截距项为:',lr.intercept_)
# coef_变量中保存着系数,就是斜率参数
print('求解系数为:',lr.coef_)
y_hat = lr.predict(X_test) #对测试集的预测

plt.figure(figsize=(10,6))  #设置图片尺寸
t = np.arange(len(X_test))  #创建t变量
#绘制y_test曲线
plt.plot(t, y_test, 'r', linewidth=2, label='y_test')
#绘制y_hat曲线
plt.plot(t, y_hat, 'g', linewidth=2, label='y_hat')
plt.legend() #设置图例
plt.show()



线性回归算法原理及项目练习_第1张图片
线性回归算法原理及项目练习_第2张图片

你可能感兴趣的:(机器学习)