机器学习200725系列---1、线性回归实例
机器学习200725系列---1、线性回归实例
一、总结
一句话总结:
用的是sklearn库的linear_model,核心代码:linreg=LinearRegression()
#一、加载数据集 pd.read_csv("*****”) #二、分割数据集 train_test_split() #三、选择/建立模型 model=LinearRegression() #四、训练模型 modeL.fit()I #五、验证模型 model.predict() #三、选择/建立模型 model=LinearRegression() linreg=LinearRegression() print(linreg) model=linreg.fit(x_train,y_train) #y_hat=theta1*X1 + theta2*X2 + theta3*X3+theat0 print(model) print("权重系数(coef_)={}".format(linreg.coef_)) print("截距项(intercept)={}".format(linreg.intercept_) 结果 LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False) LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False) 权重系数(coef_)=[ 0.04098751 0.20837822 -0.00213991] 截距项(intercept)=3.3343993230131055
1、本实例中sklearn库的应用?
数据分割【model_selection】:from sklearn.model_selection import train_test_split#分割数据集
线性模型【linear_model】:from sklearn.linear_model import LinearRegression#算法库
2、机器学习一般步骤?
加载数据集、分割数据集、选择/建立模型、训练模型、验证模型
#一、加载数据集 pd.read_csv("*****") #二、分割数据集(分成train数据和test数据,分成x和f(x)) train_test_split() #三、选择/建立模型 model=LinearRegression() #四、训练模型 modeL.fit()I #五、验证模型 model.predict()
3、matplotlib画图"ro"、"g^"、"mv"分别是什么意思?
红色的圆、绿色的上三角,紫色的下三角
|||-bgein
plt.rcParams["font.sans-serif"]=["SimHei"] plt.rcParams["font.family"]="sans-serif" plt.plot(data["TV"],y,"ro",label="TV") plt.plot(data["radio"],y,"g^",label="Radio") plt.plot(data["newspaper"],y,"mv",label="Newspaper") plt.legend(loc="lower right") plt.xlabel(u"广告花费",fontsize=16) plt.ylabel(u"销售额度",fontsize=16) plt.title(u"广告花费逾销售额度的线性数据分布",fontsize=20) plt.grid() plt.show()
|||-end
4、matplotlib画图 的网格?
plt.grid()
|||-bgein
plt.rcParams["font.sans-serif"]=["SimHei"]
plt.rcParams["font.family"]="sans-serif"
plt.plot(data["TV"],y,"ro",label="TV")
plt.plot(data["radio"],y,"g^",label="Radio")
plt.plot(data["newspaper"],y,"mv",label="Newspaper")
plt.legend(loc="lower right")
plt.xlabel(u"广告花费",fontsize=16)
plt.ylabel(u"销售额度",fontsize=16)
plt.title(u"广告花费逾销售额度的线性数据分布",fontsize=20)
plt.grid()
plt.show()
|||-end
5、matplotlib画子图?
1、plt.figure(facecolor="w",figsize=(9,10))
2、plt.subplot(311) # 三行 第一列 第一个子图
plt.figure(facecolor="w",figsize=(9,10)) # 三行 第一列 第一个子图 plt.subplot(311) plt.plot(data["TV"],y,"ro") plt.title("TV") plt.grid() plt.subplot(312) plt.plot(data["radio"],y,"g^") plt.title("Radio") plt.grid() plt.subplot(313) plt.plot(data["newspaper"],y,"mv") plt.title("Newspaper") plt.grid()
6、sklearn.model_selection 分割数据集?
a、from sklearn.model_selection import train_test_split#分割数据集
b、x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=1,train_size=0.25)
7、sklearn.linear_model线性模型?
A、引入库:from sklearn.linear_model import LinearRegression
B、建立模型:linreg=LinearRegression()
C、训练模型:model=linreg.fit(x_train,y_train)
D、验证模型:y_hat=linreg.predict(np.array(x_train))
8、sklearn.linear_model线性模型中的w和b?
1、print("权重系数(coef_)={}".format(linreg.coef_))
2、print("截距项(intercept)={}".format(linreg.intercept_))
#三、选择/建立模型 model=LinearRegression() linreg=LinearRegression() print(linreg) model=linreg.fit(x_train,y_train) #y_hat=theta1*X1 + theta2*X2 + theta3*X3+theat0 print(model) print("权重系数(coef_)={}".format(linreg.coef_)) print("截距项(intercept)={}".format(linreg.intercept_)) 结果 权重系数(coef_)=[ 0.04098751 0.20837822 -0.00213991] 截距项(intercept)=3.3343993230131055
9、拿权重系数验证模型?
1、公式计算:y_real = x_train.iloc[0,0]*linreg.coef_[0]+x_train.iloc[0,1]*linreg.coef_[1]+x_train.iloc[0,2]*linreg.coef_[2]+ linreg.intercept_
2、模型预测:y_hat_0 = linreg.predict(np.array([x_train.iloc[0]]))
# print(x_train) print(x_train.iloc[0]) # 直接通过公式 y_hat=theta1*X1 + theta2*X2 + theta3*X3+theat0 算y_hat y_real = x_train.iloc[0,0]*linreg.coef_[0]+ \ x_train.iloc[0,1]*linreg.coef_[1]+ \ x_train.iloc[0,2]*linreg.coef_[2]+ linreg.intercept_ print("直接通过公式 y_hat=theta1*X1 + theta2*X2 + theta3*X3+theat0 算y_hat:",y_real) # 通过预测方法 linreg.predict 来算 y_hat # 结果是一样的 y_hat_0=linreg.predict(np.array([x_train.iloc[0]])) print("通过预测方法 linreg.predict 来算 y_hat:",y_hat_0) # print(y_train) print("真实数据:",y_train.iloc[0]) 结果 TV 216.4 radio 41.7 newspaper 39.6 Name: 52, dtype: float64 直接通过公式 y_hat=theta1*X1 + theta2*X2 + theta3*X3+theat0 算y_hat: 20.80872883130116 通过预测方法 linreg.predict 来算 y_hat: [20.80872883] 真实数据: 22.6
10、本例中最小二乘法计算误差?
MSE=np.average((y_hat-np.array(y_train))**2)
# 最小二乘法计算误差 y_hat=linreg.predict(np.array(x_train)) MSE=np.average((y_hat-np.array(y_train))**2) RMSE =np.sqrt(MSE) print("残差平方根(MSE)={}".format(MSE)) print("开平方(RMSE)={}".format(RMSE)) 结果 残差平方根(MSE)=2.2149498499353983 开平方(RMSE)=1.4882707582746488
11、matplotlib画真实结果和预测结果?
将x的数据换成连续数据(t=np.arange(len(x_train))),放上实际y和预测y
t=np.arange(len(x_train)) plt.title(u"模型于测试Y值的数据对比",fontsize=20) plt.plot(t,y_hat,"r-",linewidth=2,label="Train") plt.plot(t,y_train,"g-",linewidth=2,label="Predict") plt.legend(loc ="upper right") plt.show()
二、线性回归实例
博客对应课程的视频位置:
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#算法库
#一、加载数据集 pd.read_csv("*****”)
#二、分割数据集 train_test_split()
#三、选择/建立模型 model=LinearRegression()
#四、训练模型 modeL.fit()I
#五、验证模型 model.predict()
一、加载数据集 pd.read_csv("*”)
In [2]:
#一、加载数据集 pd.read_csv("*****”)
data = pd.read_csv('dataset/Advertising.csv')
data
Out[2]:
In [3]:
x = data.iloc[:,1:-1]
y = data.iloc[:,-1]
x
Out[3]:
In [4]:
y
Out[4]:
In [5]:
x["TV"]
Out[5]:
In [6]:
data["TV"]
Out[6]:
In [7]:
plt.rcParams["font.sans-serif"]=["SimHei"]
plt.rcParams["font.family"]="sans-serif"
In [8]:
plt.plot(data["TV"],y,"ro",label="TV")
plt.plot(data["radio"],y,"g^",label="Radio")
plt.plot(data["newspaper"],y,"mv",label="Newspaper")
plt.legend(loc="lower right")
plt.xlabel(u"广告花费",fontsize=16)
plt.ylabel(u"销售额度",fontsize=16)
plt.title(u"广告花费逾销售额度的线性数据分布",fontsize=20)
plt.grid()
plt.show()
In [9]:
plt.figure(facecolor="w",figsize=(9,10))
# 三行 第一列 第一个子图
plt.subplot(311)
plt.plot(data["TV"],y,"ro")
plt.title("TV")
plt.grid()
plt.subplot(312)
plt.plot(data["radio"],y,"g^")
plt.title("Radio")
plt.grid()
plt.subplot(313)
plt.plot(data["newspaper"],y,"mv")
plt.title("Newspaper")
plt.grid()
二、分割数据集 train_test_split()
In [10]:
#二、分割数据集 train_test_split()
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=1,train_size=0.25)
print(x_train)
print(x_test)
In [11]:
# x_train 表示训练数据中的x,y_train表示训练数据中的y
print(x_train.shape)
print(y_train.shape)
print(x_test.shape)
print(y_test.shape)
print(y_train)
print(y_test)
In [12]:
LinearRegression
Out[12]:
三、选择/建立模型 model=LinearRegression()
四、训练模型 modeL.fit()I
In [13]:
#三、选择/建立模型 model=LinearRegression()
linreg=LinearRegression()
print(linreg)
model=linreg.fit(x_train,y_train)
#y_hat=theta1*X1 + theta2*X2 + theta3*X3+theat0
print(model)
print("权重系数(coef_)={}".format(linreg.coef_))
print("截距项(intercept)={}".format(linreg.intercept_))
五、验证模型 model.predict()
train数据的误差
In [14]:
# 最小二乘法计算误差
y_hat=linreg.predict(np.array(x_train))
MSE=np.average((y_hat-np.array(y_train))**2)
RMSE =np.sqrt(MSE)
print("残差平方根(MSE)={}".format(MSE))
print("开平方(RMSE)={}".format(RMSE))
In [15]:
t=np.arange(len(x_train))
plt.title(u"模型于测试Y值的数据对比",fontsize=20)
plt.plot(t,y_hat,"r-",linewidth=2,label="Train")
plt.plot(t,y_train,"g-",linewidth=2,label="Predict")
plt.legend(loc ="upper right")
plt.show()
test数据的误差
In [16]:
# 最小二乘法计算误差
y_hat=linreg.predict(np.array(x_test))
MSE=np.average((y_hat-np.array(y_test))**2)
RMSE =np.sqrt(MSE)
print("残差平方根(MSE)={}".format(MSE))
print("开平方(RMSE)={}".format(RMSE))
In [17]:
t=np.arange(len(x_test))
plt.title(u"模型于测试Y值的数据对比",fontsize=20)
plt.plot(t,y_hat,"r-",linewidth=2,label="Test")
plt.plot(t,y_test,"g-",linewidth=2,label="Predict")
plt.legend(loc ="upper right")
plt.show()
In [ ]:

浙公网安备 33010602011771号