返回首页
## 什么是机器学习
机器学习是人工智能的一个重要分支,它使计算机能够从数据中学习并改进性能,而无需显式编程。简单来说,机器学习让计算机像人类一样从经验中学习。
### 机器学习的三大类型
1. **监督学习**:从标记数据中学习映射函数
2. **无监督学习**:从未标记数据中发现隐藏模式
3. **强化学习**:通过与环境交互学习最优策略
## 监督学习
### 分类问题
分类是预测离散标签的问题。常见的分类算法包括:
- 逻辑回归
- 支持向量机 (SVM)
- 决策树
- 随机森林
- 神经网络
```python
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# 加载数据
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(
iris.data, iris.target, test_size=0.2, random_state=42
)
# 训练模型
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"准确率: {accuracy:.2%}")
```
### 回归问题
回归是预测连续值的问题。常见的回归算法包括:
- 线性回归
- 岭回归
- LASSO 回归
- 支持向量回归
## 无监督学习
### 聚类
聚类是将数据分成相似组的技术。常用的聚类算法:
- K-Means
- 层次聚类
- DBSCAN
```python
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import numpy as np
# 生成示例数据
np.random.seed(42)
X = np.concatenate([
np.random.randn(100, 2) + [2, 2],
np.random.randn(100, 2) + [-2, -2],
np.random.randn(100, 2) + [2, -2],
])
# K-Means 聚类
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)
# 可视化
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_, cmap='viridis')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1],
marker='X', s=200, color='red', label='Centroids')
plt.legend()
plt.show()
```
### 降维
降维技术用于减少数据维度,同时保留重要信息:
- PCA (主成分分析)
- t-SNE
- UMAP
## 模型评估
### 交叉验证
交叉验证是一种评估模型泛化能力的技术:
```python
from sklearn.model_selection import cross_val_score
scores = cross_val_score(model, X, y, cv=5, scoring='accuracy')
print(f"平均准确率: {scores.mean():.2%} ± {scores.std():.2%}")
```
### 混淆矩阵
混淆矩阵展示了预测结果与真实标签的对比:
```python
from sklearn.metrics import confusion_matrix, classification_report
cm = confusion_matrix(y_test, y_pred)
print("混淆矩阵:")
print(cm)
print("\n分类报告:")
print(classification_report(y_test, y_pred))
```
## 实战项目
### 项目:垃圾邮件分类器
```python
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline
from sklearn.model_selection import train_test_split
# 示例数据
emails = [
("Win a free iPhone! Click now!", "spam"),
("Meeting tomorrow at 3pm", "ham"),
("Congratulations! You won $1000!", "spam"),
("Please review the document", "ham"),
# ... 更多数据
]
texts, labels = zip(*emails)
# 创建管道
pipeline = Pipeline([
('tfidf', TfidfVectorizer(stop_words='english')),
('classifier', MultinomialNB())
])
# 训练和评估
X_train, X_test, y_train, y_test = train_test_split(
texts, labels, test_size=0.2, random_state=42
)
pipeline.fit(X_train, y_train)
accuracy = pipeline.score(X_test, y_test)
print(f"准确率: {accuracy:.2%}")
```
## 学习路径建议
1. **基础阶段**
- 学习 Python 编程
- 掌握 NumPy 和 Pandas
- 理解统计学基础
2. **进阶阶段**
- 学习 scikit-learn
- 理解常用算法原理
- 完成小型项目
3. **深入阶段**
- 学习深度学习框架
- 研究前沿论文
- 参与 Kaggle 竞赛
## 总结
机器学习是一个充满挑战和机遇的领域。通过理论学习与实战结合,你可以逐步掌握这一强大技术。记住,实践是最好的学习方式。
---
*祝你在学习机器学习的道路上取得进步!*