获取案例链接、直播课件、数据集在本公众号内发送“机器学习”。
然而,目前确定鲍鱼年龄的技术是相当昂贵和低效的。农场主通常把鲍鱼的壳割下来,用显微镜数鲍鱼环的数量,以估计鲍鱼的年龄。因此判断鲍鱼的年龄很困难,主要是因为鲍鱼的大小不仅取决于年龄,而且还取决于食物的供应情况。此外,鲍鱼有时会形成所谓的“发育不良”群体,这些群体的生长特性与其他鲍鱼种群有很大不同。这种复杂的方法增加了成本,限制了应用范围。本案例的目标是使用机器学习中的回归模型,找出最佳的指标来预测鲍鱼环数,进而预测鲍鱼的年龄。
我们首先将鲍鱼数据集abalone_dataset.csv读取为Pandas的DataFrame格式。
查看数据集中样本数量和特征数量。
首先借助seaborn中的countplot函数绘制条形图,观察sex列的取值分布情况。
对于连续特征,可以使用seaborn的distplot函数绘制直方图观察特征取值情况。我们将8个连续特征的直方图绘制在一个4行2列的子图布局中。
一般每过一年,鲍鱼就会在其壳上留下一道深深的印记,这叫生长纹,就相当于树木的年轮。在本数据集中,我们要预测的是鲍鱼的年龄,可以通过环数rings加上1.5得到。
将数据集随机划分为训练集和测试集,其中80%样本为训练集,剩余20%样本为测试集。
fromsklearnimportmodel_selectionX_train,X_test,y_train,y_test=model_selection.train_test_split(X,y,test_size=0.2,random_state=111)3实现线性回归和岭回归3.1使用Numpy实现线性回归如果矩阵为满秩(行列式不为0),则简单线性回归的解为。实现一个函数linear_regression,其输入为训练集特征部分和标签部分,返回回归系数向量。我们借助numpy工具中的np.linalg.det函数和np.linalg.inv函数分别求矩阵的行列式和矩阵的逆。
使用上述实现的线性回归模型在鲍鱼训练集上训练模型。
sklearn中的linear_model模块实现了常见的线性模型,包括线性回归、岭回归和LASSO等。对应的算法和类名如下表所示。
下面我们使用LinearRegression构建线性回归模型。注意,此时传给fit方法的训练集的特征部分不包括ones列。模型训练完成后,lr.coef_属性和lr.intercept_属性分别保存了学习到的回归系数向量和截距项。
对比上表可以看到,在训练集上训练鲍鱼年龄预测模型时,我们使用Numpy实现的线性回归模型与sklearn得到的结果是一致的。
单位矩阵可使用np.eye函数自动生成,其大小为,即与特征矩阵X的列数(X.shape[1])相同。
defridge_regression(X,y,ridge_lambda):penalty_matrix=np.eye(X.shape[1])penalty_matrix[X.shape[1]-1][X.shape[1]-1]=0w=np.linalg.inv(X.T.dot(X)+ridge_lambda*penalty_matrix).dot(X.T).dot(y)returnw在鲍鱼训练集上使用ridge_regression函数训练岭回归模型,正则化系数设置为1。