评估多个模型[系列完结]

科技   2024-10-10 20:53   广东  

 今天是生信星球陪你的第1004天


   

公众号里的文章大多数需要编程基础,如果因为代码看不懂,而跟不上正文的节奏,可以来找我学习,相当于给自己一个新手保护期。我的课程都是循环开课,点进去咨询微信↓

生信分析直播课程(每月初开一期,春节休一个月)

生信新手保护学习小组(每月两期)

单细胞陪伴学习小组(每月两期)

这是python scikit-learn机器学习框架的入门课程笔记,现在已经到最后一篇啦。列一列目录。

使用scikit-learn进行机器学习

机器学习分类模型的构建和预测

机器学习分类模型的性能衡量

线性回归模型简介

线性回归的基础知识

理解什么叫交叉验证

正则化回归

分类模型的评测指标

逻辑回归与ROC 曲线(标题忘记改了)

模型的超参数优化

建模数据的预处理


本文目录

  • 不同问题的不同模型

  • 模型评测指标

  • 比较KNN、逻辑回归和决策树模型

不同问题的不同模型

如何决定使用哪个模型呢?

一些指导原则:

  • 数据集的大小
    • 特征越少,模型越简单,训练时间越短
    • 有的模型需要大量的数据才能正常运行
  • 可解释性
    • 有的模型易于解释
    • 线性模型可解释性较强,因为我们可以理解系数
  • 灵活性
    • 可以提高准确性,灵活的模型对数据所作的假设较少
    • KNN就是一个灵活的模型,不假定特征和目标时间存在线性关系

模型评测指标

scikit-learn允许对大多数模型使用相同的方法,这让模型比较变得更容易。

可以选择多个模型,比较它们的某个指标来评估它们的性能,无需任何超参数优化。

注意:有的模型收到scale的影响:

  • K临近法
  • 线性回归
  • 逻辑回归
  • 人工神经网络

所以比较之前先把数据scale。

比较KNN、逻辑回归和决策树模型

如往常一样,拆分数据,并对训练集和测试集做了标准化

import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import cross_val_score, KFold, train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
X = music.drop("genre", axis=1).values
y = music["genre"].values
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

交叉验证

循环创建模型,并把交叉验证的评分计算出来,画箱线图。

models = {"Logistic Regression": LogisticRegression(), 
          "KNN": KNeighborsClassifier(),
          "Decision Tree": DecisionTreeClassifier()}
results = []
for model in models.values():
    kf = KFold(n_splits=6, random_state=42, shuffle=True)
    cv_results = cross_val_score(model, X_train_scaled, y_train, cv=kf)
    results.append(cv_results)
plt.boxplot(results, labels=models.keys())
plt.show()

测试集的表现

for name, model in models.items(): 
    model.fit(X_train_scaled, y_train) 
    test_score = model.score(X_test_scaled, y_test) 
    print("{} Test Set Accuracy: {}".format(name, test_score)) 

生信星球
一个零基础学生信的平台-- 原创结构化图文/教程,精选阶段性资料,带你少走弯路早入门,收获成就感,早成生信小能手~
 最新文章