生物信息与机器学习6 - 有监督学习算法和无监督学习算法

1.有监督学习算法

有监督学习算法推荐:

决策树分类器 - 适合处理分类问题,容易理解和可视化;

KNN分类器 - 对于简单的单特征分类也很有效;

逻辑回归 (多分类) - 使用one-vs-all策略处理多类别。

有监督学习的选择:

如果数据分布比较简单,建议使用KNN;

如果需要清晰的决策边界,使用决策树;

如果数据呈现线性可分的特征,可以使用逻辑回归。

python 复制代码
import matplotlib.pyplot as plt
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

# 生成示例数据
X = np.random.rand(100, 1) * 10  # 单特征数据
y = np.where(X < 2.5, 0,
        np.where(X < 5, 1,
            np.where(X < 7.5, 2, 3)))  # 4个类别

# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# 1. 决策树
dt_clf = DecisionTreeClassifier()
dt_clf.fit(X_train, y_train)
dt_score = dt_clf.score(X_test, y_test)

# 2. KNN
knn_clf = KNeighborsClassifier(n_neighbors=3)
knn_clf.fit(X_train, y_train)
knn_score = knn_clf.score(X_test, y_test)

# 3. 逻辑回归
lr_clf = LogisticRegression(multi_class='ovr')
lr_clf.fit(X_train, y_train)
lr_score = lr_clf.score(X_test, y_test)

print(f"决策树准确率: {dt_score:.3f}")
print(f"KNN准确率: {knn_score:.3f}")
print(f"逻辑回归准确率: {lr_score:.3f}")

2. 无监督学习算法

无监督学习算法推荐:

K-means聚类 - 最常用的聚类算法;

DBSCAN - 基于密度的聚类。

无监督学习选择:

如果类别数量已知(本例中是4个),推荐使用K-means;

如果类别数量未知,可以尝试使用DBSCAN。

python 复制代码
from sklearn.cluster import KMeans, DBSCAN
from sklearn.metrics import silhouette_score

# 使用数据为上述生成数据
# K-means聚类
kmeans = KMeans(n_clusters=4, random_state=42)
kmeans_labels = kmeans.fit_predict(X)

# DBSCAN聚类
dbscan = DBSCAN(eps=0.5, min_samples=5)
dbscan_labels = dbscan.fit_predict(X)

# 计算轮廓系数
kmeans_silhouette = silhouette_score(X, kmeans_labels)
print(f"K-means轮廓系数: {kmeans_silhouette:.3f}")

# 可视化结果
plt.figure(figsize=(12, 4))

plt.subplot(121)
plt.scatter(X, np.zeros_like(X), c=kmeans_labels)
plt.title('K-means聚类结果')

plt.subplot(122)
plt.scatter(X, np.zeros_like(X), c=dbscan_labels)
plt.title('DBSCAN聚类结果')

plt.tight_layout()
plt.show()
相关推荐
无心水4 分钟前
大语言模型零样本情感分析实战:无需机器学习训练,96%准确率实现指南
人工智能·机器学习·语言模型
艾莉丝努力练剑2 小时前
【LeetCode&数据结构】单链表的应用——反转链表问题、链表的中间节点问题详解
c语言·开发语言·数据结构·学习·算法·leetcode·链表
_殊途4 小时前
《Java HashMap底层原理全解析(源码+性能+面试)》
java·数据结构·算法
橡晟6 小时前
深度学习入门:让神经网络变得“深不可测“⚡(二)
人工智能·python·深度学习·机器学习·计算机视觉
墨尘游子6 小时前
神经网络的层与块
人工智能·python·深度学习·机器学习
倔强青铜36 小时前
苦练Python第18天:Python异常处理锦囊
开发语言·python
Leah01056 小时前
机器学习、深度学习、神经网络之间的关系
深度学习·神经网络·机器学习·ai
企鹅与蟒蛇6 小时前
Ubuntu-25.04 Wayland桌面环境安装Anaconda3之后无法启动anaconda-navigator问题解决
linux·运维·python·ubuntu·anaconda
autobaba7 小时前
编写bat文件自动打开chrome浏览器,并通过selenium抓取浏览器操作chrome
chrome·python·selenium·rpa
珊瑚里的鱼7 小时前
LeetCode 692题解 | 前K个高频单词
开发语言·c++·算法·leetcode·职场和发展·学习方法