机器学习:Python实现简单线性回归
线性和非线性回归的回归模型用于预测实际值。例如,如果您的自变量是时间,那么您正在预测未来值,否则您的模型将预测当前但未知的值。回归技术有所不同,从线性回归到SVR和随机森林回归,根据您需要解决的问题类型,您可以选择其中一种。
举一个实际的例子,我们考虑一个数据集,其中包含来自不同员工的30个观察结果,其中有一个独立变量“经验年数”和相关变量“薪水”。我们需要知道的是这两个变量之间是否存在任何相关性。这是我们事先知道存在某种相关性的一个例子,因为我们知道经验很重要,但总是存在这种关系波动的范围,并且没有确定精确相关性的规则。在这种情况下,我们将创建一个简单的模型,它将告诉我们这种关系的最佳拟合线。如果您想从业务价值和角度来看待它,想象一下公司可能不完全知道如何为不同员工计算不同薪水的一套规则,
公式给出了简单线性回归:
你可能认识这个公式,Y是一个dipendent变量(在这个例子中,薪水是如何随着多年的经验而变化的)。X是indipendent变量,b1是用于indipendent变量的系数(它解释了X值的变化如何影响Y的单位),而b0是常数项。回归所做的就是在图表中画一条最符合数据的直线,这里的假设是回归直线是最接近这些值的可能直线。
现在让我们关注系数和常数。常数实际上是指直线与垂直线相交的点,当indipendent等于0时dipendent变量默认为b0;b1表示线的斜率,并且线越陡峭的变量将越高。因此,如果系数b1越小,斜率就越小,如果斜率越大,那么经验就会带来更多的工资增长。其核心目标不是简单地画一条线,而是实际使用最佳拟合线。
但是我们如何找到最合适的直线呢?这是简单的线性回归,让我们绘制从点到模型的垂直线。所以在这里你可以看到,红色十字架是员工在薪水方面的地方,而回归线告诉我们这些员工应该在哪里。红色十字架被称为Y,绿色十字架Y ^,因此绿色dottet线是根据我们的观察值与它们应该根据我们的模型的位置之间的差异。现在要获得拟合线,我们需要将所有这些距离平方并取这些方格的总和。一旦我们得到这些平方的总和,我们就会找到最小值,因此简单的线性回归模型将绘制许多虚线并找到最小平方和的最小值,普通最小二乘。
要在Python中执行简单的线性回归,第一步是预处理数据以分割数据。然后我们需要做的是从sklearn库导入线性模型子库,并使用线性回归类,我们将使用FIT方法创建一个名为REGRESSOR的对象。
# Data Preprocessing
# Importing the Library
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# Importing the dataset
dataset= pd.read_csv('Data.csv')
X = dataset.iloc[: , :-1].values
Y = dataset.iloc[: , :1].values
# Splitting the dataset into the Training set and Test Set
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 1/3, random_state = 0)
# Fitting Simple Linear Regression model to the training set
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)
下一步是通过使用方法PREDICT在预测相关变量y_pred的矢量中预测测试集结果。Python代码如下:
# Data Preprocessing
# Importing the Library
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# Importing the dataset
dataset= pd.read_csv('Data.csv')
X = dataset.iloc[: , :-1].values
Y = dataset.iloc[: , :1].values
# Splitting the dataset into the Training set and Test Set
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 1/3, random_state = 0)
# Fitting Simple Linear Regression model to the training set
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)
# Predicting the Test set results
y_pred = regressor.predict(X_test)
最后一步是将我们的输出可视化,以解释结果。在这里,我们使用一个PYPLOT函数,称为散点,来制作点的散点图,以及回归直线与函数图的散点图,用于训练集和测试集。Python实现如下:
# Data Preprocessing
# Importing the Library
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# Importing the dataset
dataset= pd.read_csv('Data.csv')
X = dataset.iloc[: , :-1].values
Y = dataset.iloc[: , :1].values
# Splitting the dataset into the Training set and Test Set
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 1/3, random_state = 0)
# Fitting Simple Linear Regression model to the training set
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)
# Predicting the Test set results
y_pred = regressor.predict(X_test)
# Visualising the Training set resuts
plt.scatter(X_train, y_train, color = 'red')
plt.plot(X_train, regressor.predict(X_train), color = 'blue')
plt.title('Salary vs Experience (Training set)')
plt.xlabel('Years of Experience')
plt.ylabel('Salary')
plt.show()
# Visualising the Test set resuts
plt.scatter(X_train, y_train, color = 'red')
plt.plot(X_train, regressor.predict(X_train), color = 'blue')
plt.title('Salary vs Experience (Test set)')
plt.xlabel('Years of Experience')
plt.ylabel('Salary')
plt.show()