今天是生信星球陪你的第1004天
公众号里的文章大多数需要编程基础,如果因为代码看不懂,而跟不上正文的节奏,可以来找我学习,相当于给自己一个新手保护期。我的课程都是循环开课,点进去咨询微信↓
生信分析直播课程(每月初开一期,春节休一个月)
生信新手保护学习小组(每月两期)
单细胞陪伴学习小组(每月两期)
这是python scikit-learn机器学习框架的入门课程笔记,现在已经到最后一篇啦。列一列目录。
本文目录
不同问题的不同模型
模型评测指标
比较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))