Benjamin O. Tayo 的图片
回归模型是最流行的机器学习模型。回归模型用于连续预测目标变量。回归模型在几乎每个研究领域都有应用,因此,它是使用最广泛的机器学习模型之一。本文将讨论线性回归的基础知识,面向数据科学领域的初学者。
使用游轮数据集cruise _ ship _ info . CSV,我们将使用 NumPy、Pylab 和 Scikit-learn 演示简单和多重回归分析。因为这只是一个介绍性的教程,所以不需要区分内部值和外部值(外部值可以使用更健壮的方法来处理,比如 RANSAC 回归)。
import numpy as npimport pandas as pdimport pylabimport matplotlib.pyplot as pltimport seaborn as snsimport matplotlib.pyplot as pltfrom sklearn.metrics import r2_scorefrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import StandardScalerfrom sklearn.linear_model import LinearRegressionfrom sklearn.pipeline import Pipelinepipe_lr = Pipeline([('scl', StandardScaler()),
('lr', LinearRegression())])
df = pd.read_csv("cruise_ship_info.csv")df.head()
表 1 :显示数据集的前 5 行。
cols = ['Age', 'Tonnage', 'passengers', 'length',
'cabins','passenger_density','crew']
stdsc = StandardScaler()X_std = stdsc.fit_transform(df[cols].iloc[:,range(0,7)].valuescov_mat = np.cov(X_std.T)
plt.figure(figsize=(10,10))sns.set(font_scale=1.5)hm = sns.heatmap(cov_mat,
cbar=**True**,
annot=**True**,
square=**True**,
fmt='.2f',
annot_kws={'size': 12},
yticklabels=cols,
xticklabels=cols)
plt.title('Covariance matrix showing correlation coefficients')
plt.tight_layout()
plt.show()
图一。协方差矩阵图。
在简单线性回归中,只有一个预测变量。由于我们的目标是预测乘务人员变量,我们从图 1中看到客舱变量与乘务人员变量相关性最大。因此,我们的简单回归模型可以表示为以下形式:
其中 m 是斜率或回归系数,c 是截距。该模型将使用 R2 评分标准进行评估,其计算方法如下:
R2 分数取 0 到 1 之间的值。当 R2 接近 1 时,意味着预测值与实际值非常接近。如果 R2 接近于零,则意味着模型的预测能力非常差。
现在让我们定义并绘制自变量和因变量:
X = df['cabins']y = df['crew']plt.scatter(X,y,c='steelblue', edgecolor='white', s=70)plt.xlabel('cabins')plt.ylabel('crew')plt.title('scatter plot of crew vs. cabins')plt.show()
图二。船员与客舱的散点图。
z = np.polyfit(X,y,1)p = np.poly1d(z)print(p)
输出 : 0.745 x + 1.216
这表明拟合的斜率是 m = 0.745,截距是 c = 1.216。
y_pred_numpy = p(X)R2_numpy = 1 - ((y-y_pred_numpy)**2).sum()/((y-y.mean())**2).sum()print(R2_numpy)
输出:R2 _ numpy = 0.90068686686
print(r2_score(y, y_pred_numpy))
输出:0.9000000000001
现在让我们绘制实际值和预测值:
plt.figure(figsize=(10,7))plt.scatter(X,y,c='steelblue', edgecolor='white', s=70,
label='actual')plt.plot(X,y_pred_numpy, color='black', lw=2, label='predicted')plt.xlabel('cabins')plt.ylabel('crew')plt.title('actual and fitted plots')plt.legend()plt.show()
图 3 。船员与客舱的实际和拟合图。
degree = 1model= pylab.polyfit(X,y,degree)print(model)
输出:数组([0.7449974,1.21585013])。我们再次看到斜率是 m = 0.745,截距是 c = 1.216。
y_pred_pylab = pylab.polyval(model,X)R2_pylab = 1 - ((y-y_pred_pylab)**2).sum()/((y-y.mean())**2).sum()print(R2_pylab)
输出值:R2 _ 皮拉布= 0.904686868667
print(r2_score(y, y_pred_pylab))
输出:0.90363863863686
lr = LinearRegression()lr.fit(X.values.reshape(-1,1),y)print(lr.coef_)print(lr.intercept_)
输出:【0.7449974】,1.2158501299368671。我们再次看到斜率是 m = 0.745,截距是 c = 1.216。
y_pred_sklearn = lr.predict(X.values.reshape(-1,1))R2_sklearn = 1 - ((y-y_pred_sklearn)**2).sum()/((y-y.mean())**2).sum()print(R2_sklearn)
输出:R2 _ sklean = 0.90686866666
print(r2_score(y, y_pred_sklearn))
输出:0.9036868686686
我们观察到基本线性回归的所有 3 种方法(NumPy、Pylab 和 Scikit-learn)给出了一致的结果。
从上面的协方差矩阵图(图 1 )中,我们看到“船员”变量与 4 个预测变量“吨位”、“乘客”、“长度”和“客舱”高度相关(相关系数≥ 0.6)。因此,我们可以建立以下形式的多元回归模型:
其中 X 是特征矩阵,w0 是截距,w1、w2、w3 和 w4 是回归系数。
cols_selected = ['Tonnage', 'passengers', 'length', 'cabins','crew']df[cols_selected].head()X = df[cols_selected].iloc[:,0:4].values # features matrix y = df[cols_selected]['crew'].values # target variable
表 2 。前 5 行重要特征和预测变量。
X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.3, random_state=0)sc_y = StandardScaler()y_train_std = sc_y.fit_transform(y_train[:,np.newaxis]).flatten()pipe_lr.fit(X_train, y_train_std)y_train_pred = sc_y.inverse_transform(pipe_lr.predict(X_train))y_test_pred = sc_y.inverse_transform(pipe_lr.predict(X_test))r2_score_train = r2_score(y_train, y_train_pred)r2_score_test = r2_score(y_test, y_test_pred)print('R2 train for lr: %.3f' % r2_score_train)print('R2 test for lr: %.3f ' % r2_score_test)
输出:
R2 列车为 0.912 R2 列车为 0.958
plt.scatter(y_train, y_train_pred, c='steelblue', edgecolor='white', s=70, label='fitted')plt.plot(y_train, y_train, c = 'red', lw = 2,label='ideal')plt.xlabel('actual crew')plt.ylabel('predicted crew')plt.legend()plt.show()
图 4 。使用多元回归分析的机组变量的理想图和拟合图。
总之,我们介绍了一个使用不同库(如 NumPy、Pylab 和 Scikit-learn)的简单和多元回归分析教程。线性回归是最流行的机器学习算法。对线性回归的透彻理解将为理解其他机器学习算法(如逻辑回归、K-最近邻和支持向量机)打下良好的基础。
数据科学最低要求:开始从事数据科学工作需要知道的 10 项基本技能
数据科学 101 —包含 R 和 Python 代码的中型平台短期课程
如有疑问,请发邮件给我:benjaminobi@gmail.com