经典机器学习(二)
一、损失函数损失函数使用来判定模型预测好坏的一种依据模型的目标就是将损失函数值降到最低损失函数最低是模型的目标而非开发者的唯一目标评定一个模型的好坏线性模型通过R方等决定系数来判断好坏分类模型通过AUC的值也就是ROC曲线的面积或者f1分数准确率精准率召回率等来参考模型好坏#训练集的损失值计算 train_loss mean_squared_error(train_y,model.predict(train_x))二、欠拟合与过拟合1欠拟合1、欠拟合特点测试集损失值很大训练集损失值也很大预测出的曲线与真实值的趋势明显不相符2、可能出现欠拟合的原因与解决方法模型复杂度不足 增加模型复杂度模型正则项过大 减小模型的正则项系数模型迭代次数较少没有学习到数据规律增加迭代次数模型特征不足使用麦克劳林展开增加特征项#欠拟合 #训练模型 model.fit(train_x,train_y) #模型评估 train_loss mean_squared_error(train_y,model.predict(train_x)) test_loss mean_squared_error(test_y,model.predict(test_x)) print(ftrain_loss {train_loss}, test_loss {test_loss}) ax[0].plot(x,model.predict(x),colorred)2恰好拟合1、恰好拟合特点模型训练集损失很小测试集损失也很小测试集损失略高于训练集预测出的曲线基本符合真实值的趋势#恰好拟合 #特征工程 poly PolynomialFeatures(degree5) train_2x poly.fit_transform(train_x) test_2x poly.transform(test_x) model.fit(train_2x,train_y) train_loss mean_squared_error(train_y,model.predict(train_2x)) test_loss mean_squared_error(test_y,model.predict(test_2x)) print(ftrain_loss {train_loss}, test_loss {test_loss}) ax[1].plot(x,model.predict(poly.transform(x)),colorred)3过拟合1、过拟合特点测试集损失值很大训练集损失值也很小预测出的曲线与真实值的趋势相符。但是明显过于贴合趋势2、可能出现过拟合的原因与解决方法模型过于复杂度 减少模型复杂度样本量过小导致模型能记住细节但是无法泛化新数据 增加样本数模型训练时间过强将噪声也学习过去了早停在损失值不下降之后停止训练模型特征过多调大正则项的强度避免过度拟合#特征工程 #过拟合 poly PolynomialFeatures(degree20) train_20x poly.fit_transform(train_x) test_20x poly.transform(test_x) model.fit(train_20x,train_y) train_loss mean_squared_error(train_y,model.predict(train_20x)) test_loss mean_squared_error(test_y,model.predict(test_20x)) print(ftrain_loss {train_loss}, test_loss {test_loss}) ax[2].plot(x,model.predict(poly.transform(x)),colorred)三、正则化L1正则也称之为lasso回归使用参数的绝对值之和成正则系数一般不常用因为曲线不光滑所以不可导部分权重趋近0甚至变为0。这会导致特征选择即模型会自动“丢弃”一些不重要的特征#设置正则系数为0.099 model Lasso(alpha0.099) model.fit(train_x,train_y) print(model.coef_,model.intercept_) loss mean_squared_error(test_y,model.predict(test_x)) print(f决定系数,model.score(test_x, test_y)) ax[0,1].plot(x,model.predict(poly.transform(x)),colorred) ax[1,1].bar(np.arange(len(model.coef_.reshape(-1))),model.coef_.reshape(-1)) print(ftest_loss2 {loss})L2正则也称之为岭回归参数的平方的和乘正则系数因为曲线光滑可导用的比较多#设置正则项强度为0.8 model Ridge(alpha0.8) model.fit(train_x,train_y) print(model.coef_,model.intercept_) loss mean_squared_error(test_y,model.predict(test_x)) print(f决定系数,model.score(test_x, test_y)) ax[0,2].plot(x,model.predict(poly.transform(x)),colorred) ax[1,2].bar(np.arange(len(model.coef_.reshape(-1))),model.coef_.reshape(-1)) print(ftest_loss3 {loss})四、模型评估指标1、对于线性模型R方决定系数均方误差平均绝对误差均方根误差等2、对于分类模型准确率精准率召回率AUC值f1分数等y_true [猫, 猫, 猫, 猫, 猫, 猫, 狗, 狗, 狗, 狗] # 真实值 y_pred [猫, 猫, 狗, 猫, 猫, 猫, 猫, 猫, 狗, 狗] labels [猫, 狗] matrix metrics.confusion_matrix(y_true, y_pred, labelslabels) print(matrix) data pd.DataFrame(matrix, indexlabels, columnslabels) print(data) #准确率 print(metrics.accuracy_score(y_true, y_pred)) #精确率(预测的正例里有多少对的) print(metrics.precision_score(y_true, y_pred, pos_label猫)) #召回率查全率实例的正例中查出来了多少 print(metrics.recall_score(y_true, y_pred,pos_label猫)) #f1分数 print(metrics.f1_score(y_true, y_pred, pos_label猫)) #评估报告 print(metrics.classification_report(y_true, y_pred))五、交叉验证1、简单交叉验证分为测试集于验证集#对数据进行训练集和测试集的划分 train_x,test_x,train_y,test_y train_test_split(x,y,test_size0.2)2、k折验证将数据集评分为k份k-1用于训练一份用来测试循环往复直到每一份都当过测试集3、留一验证将数据集只留一个样本进行测试其他都用于训练每个样本都当一次测试集直到全部当完
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2563119.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!