机器学习(Machine Learning)是人工智能的一个子集,旨在通过计算机系统的学习和自动化推理,使计算机能够从数据中获取知识和经验,并利用这些知识和经验进行模式识别、预测和决策。以下是关于机器学习的详细介绍、基本概念以及一个学习计划。
机器学习算法构建一个基于样本数据的数学模型,称为“训练数据”,以便在没有明确编程来执行任务的情况下进行预测或决策。机器学习算法用于各种应用,例如电子邮件过滤和计算机视觉,在这些应用中,开发用于执行任务的特定指令的算法是不可行的。机器学习与计算统计学密切相关,计算统计学侧重于使用计算机进行预测。
机器学习三要素:机器学习三要素包括数据、模型、算法。这三要素之间的关系可以用下面这幅图来表示:
机器学习基本过程:
机器学习算法分类:机器学习算法可以分为监督学习(Supervised Learning)、无监督学习(Unsupervised Learning)和强化学习(Reinforcement Learning)等不同类型。监督学习使用带有标签的训练数据来训练模型,以预测新数据的标签或目标值。无监督学习则是在没有标签的情况下,从数据中发现隐藏的结构和模式。强化学习则是通过与环境的交互学习,以最大化累积奖励。
大名鼎鼎TensorFlow
北大 曹老师 人工智能入门和TensorFlow实现 北大-人工智能实践:Tensorflow笔记
sklearn库介绍 学习资料 sklearn库
以下是一个为期七周的机器学习学习计划:
第一周:基础概念与线性模型
第二周:决策树与剪枝
第三周:支持向量机与核函数
第四周:朴素贝叶斯与EM算法
第五周:神经网络与深度学习
第六周:模型评估与性能度量
第七周:特征选择与降维
请注意,这个计划更适合作为一学期课程的教材,不推荐完全自学。建议结合课程进行学习,效果会更好。
sklearn库介绍 学习资料 sklearn库
Scikit-learn(简称sklearn)是一个基于Python的开源机器学习库,提供了各种机器学习算法的实现,包括分类、回归、聚类、降维等。以下是对sklearn库的详细介绍:
pip install -U scikit-learn命令进行安装;对于使用Anaconda的用户,可以使用conda install scikit-learn命令进行安装。from sklearn.linear_model import LinearRegression导入线性回归模型,然后使用model = LinearRegression()进行实例化,并通过model.fit(X_train, y_train)进行模型训练。Sklearn适用于各种领域和应用场景,包括但不限于:
总的来说,sklearn是一个功能强大且易于使用的Python库,它提供了丰富的机器学习算法和工具,适用于各种机器学习和数据挖掘任务。
以下是机器学习中一些常见算法的介绍和实例:
应用实例:
预测房价:根据房屋的面积、房间数量、房龄等特征预测房屋的价格。
import numpy as np
from sklearn.linear_model import LinearRegression
# 输入特征(面积,房间数量)
X = np.array([[1400, 3], [1600, 3], [1700, 2], [1875, 4], [1100, 2]])
# 房价
y = np.array([245000, 312000, 279000, 308000, 199000])
# 创建线性回归模型
model = LinearRegression()
# 训练模型
model.fit(X, y)
# 预测
new_house = np.array([[1500, 3]])
predicted_price = model.predict(new_house)
print(predicted_price)
应用实例:
疾病诊断:根据病人的症状、体征、检查结果等特征预测是否患有某种疾病。
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载乳腺癌数据集
data = load_breast_cancer()
X = data.data
y = data.target
# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建逻辑回归模型
model = LogisticRegression()
# 训练模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
print(accuracy_score(y_test, y_pred))
应用实例:
贷款违约预测:根据申请人的收入、债务、信用评分等特征预测是否会违约。
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载鸢尾花数据集
data = load_iris()
X = data.data
y = data.target
# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建决策树分类器
model = DecisionTreeClassifier()
# 训练模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
print(accuracy_score(y_test, y_pred))
应用实例:
图像分类:将图像根据不同类别(如人脸、车辆、动物等)进行分类。
from sklearn.svm import SVC
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 生成一个简单的分类数据集
X, y = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, random_state=42)
# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建 SVM 分类器
model = SVC(kernel='rbf')
# 训练模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
print(accuracy_score(y_test, y_pred))
应用实例:
手写数字识别:根据手写数字的像素特征将其分类为 0-9 中的一个数字。
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载手写数字数据集
data = load_digits()
X = data.data
y = data.target
# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建 KNN 分类器
model = KNeighborsClassifier(n_neighbors=3)
# 训练模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
print(accuracy_score(y_test, y_pred))
应用实例:
客户细分:根据客户的消费习惯、年龄、收入等特征将客户分成不同的群体。
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
# 生成模拟数据
X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)
# 创建 K 均值聚类模型
kmeans = KMeans(n_clusters=4)
# 训练模型
kmeans.fit(X)
# 预测簇标签
y_pred = kmeans.predict(X)
# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=200, c='red')
plt.show()
应用实例:
文档聚类:将相似的文档归为一类,可根据文档的特征向量(如词频)进行聚类。
from scipy.cluster.hierarchy import dendrogram, linkage
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
# 生成模拟数据
X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)
# 计算链接矩阵
linked = linkage(X, 'ward')
# 绘制树状图
dendrogram(linked)
plt.show()
应用实例:
高维数据可视化:将高维的数据集(如鸢尾花数据集)投影到二维或三维空间进行可视化。
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
# 加载鸢尾花数据集
data = load_iris()
X = data.data
y = data.target
# 创建 PCA 模型,将数据降维到 2 维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# 可视化结果
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y)
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.show()
应用实例:
图像分类:使用多层感知机对图像进行分类,例如在 MNIST 手写数字数据集上进行分类。
from sklearn.neural_network import MLPClassifier
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载手写数字数据集
data = load_digits()
X = data.data
y = data.target
# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建 MLP 分类器
model = MLPClassifier(hidden_layer_sizes=(100, 50), max_iter=300)
# 训练模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
print(accuracy_score(y_test, y_pred))
应用实例:
人脸识别:从图像中识别出人脸并进行身份识别。
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
# 定义简单的 CNN 模型
class SimpleCNN(nn.Module):
def __init__(self):
super(SimpleCNN, self).__init__()
self.conv1 = nn.Conv2d(1, 32, 3, 1)
self.conv2 = nn.Conv2d(32, 64, 3, 1)
self.fc1 = nn.Linear(64 * 5 * 5, 128)
self.fc2 = nn.Linear(128, 10)
def forward(self, x):
x = torch.relu(self.conv1(x))
x = torch.max_pool2d(x, 2)
x = torch.relu(self.conv2(x))
x = torch.max_pool2d(x, 2)
x = torch.flatten(x, 1)
x = torch.relu(self.fc1(x))
x = self.fc2(x)
return x
# 加载 MNIST 数据集
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))])
train_dataset = datasets.MNIST('../data', train=True, download=True, transform=transform)
test_dataset = datasets.MNIST('../data', train=False, transform=transform)
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)
# 创建模型、损失函数和优化器
model = SimpleCNN()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
# 训练模型
for epoch in range(10):
for batch_idx, (data, target) in enumerate(train_loader):
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step()
# 测试模型
correct = 0
total = 0
with torch.no_grad():
for data, target in test_loader:
output = model(data)
_, predicted = torch.max(output.data, 1)
total += target.size(0)
correct += (predicted == target).sum().item()
print('Accuracy: {:.2f}%'.format(100 * correct / total))
应用实例:
文本生成:根据输入的文本序列生成后续的文本内容。
import torch
import torch.nn as nn
import torch.optim as optim
# 定义简单的 RNN 模型
class SimpleRNN(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(SimpleRNN, self).__init__()
self.rnn = nn.RNN(input_size, hidden_size, batch_first=True)
self.fc = nn.Linear(hidden_size, output_size)
def forward(self, x):
out, _ = self.rnn(x)
out = self.fc(out[:, -1, :])
return out
# 输入和输出维度
input_size = 10
hidden_size = 20
output_size = 1
# 创建模型、损失函数和优化器
model = SimpleRNN(input_size, hidden_size, output_size)
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.01)
# 输入数据
x = torch.randn(1, 5, input_size) # 批次大小为 1,序列长度为 5,输入维度为 10
y = torch.randn(1, output_size) # 批次大小为 1,输出维度为 1
# 训练模型
for epoch in range(100):
optimizer.zero_grad()
output = model(x)
loss = criterion(output, y)
loss.backward()
optimizer.step()
以上是机器学习中常见算法的介绍和简单的 Python 实例,不同的算法适用于不同的任务和数据集,在实际应用中需要根据具体情况选择合适的算法,并通过调参和优化来提高性能。
大名鼎鼎TensorFlow
sklearn库介绍 学习资料 sklearn库