接下来我将以算法引出其应用,并给出具体的实现代码,你可能看不懂,但没关系,本来就没让你看懂,我们现在只是通过它,去了解,什么技术解决什么类型的问题,导入第三方库去训练模型是多么方便,如果你要真正掌握,不仅要学习数学如何实现这个算法的,还有通过编程实现这个算法,你才能修改第三方库,真正完成模型训练的DIY调参数,自定义修改。大部分非专业人工智能技术人员,你能看懂代码是干嘛的,就已经很不错啦,如果你还能改改参数,自己编写算法,就更厉害了!
现在我们先浏览它吧
以下是常见的机器学习典型算法:
- 线性回归 - 解决问题:用于预测连续型数值,通过找到一个线性关系来拟合自变量和因变量之间的联系,例如预测房价、销售量等。- 案例:根据房屋面积预测房价。假设房屋面积与房价存在线性关系,收集多组房屋面积及对应的房价数据进行建模预测。- 框架/库:Python的 scikit - learn 库提供了简单易用的实现。
from sklearn.linear_model import LinearRegression
import numpy as np
# 房屋面积数据,这里使用二维数组,因为fit方法要求输入至少是二维
area = np.array([100, 120, 150, 80]).reshape(-1, 1)
# 对应的房价数据
price = np.array([200, 250, 300, 180])
# 创建线性回归模型对象
model = LinearRegression()
# 使用数据训练模型
model.fit(area, price)
# 准备预测的新房屋面积数据
new_area = np.array([130]).reshape(-1, 1)
# 进行预测
predicted_price = model.predict(new_area)
print(f"预测价格: {predicted_price[0]}")
- 逻辑回归
- 解决问题:主要用于二分类问题,通过将线性回归的输出经过sigmoid函数转换为概率值,依据设定的阈值进行分类决策,如判断邮件是否为垃圾邮件、客户是否会流失等。
- 案例:判断客户是否会购买某产品。根据客户的年龄、收入等特征来预测客户购买产品的可能性。
- 框架/库: scikit - learn 库中的 LogisticRegression 类。
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 生成模拟的客户数据,n_samples是样本数量,n_features是特征数量,n_classes是类别数量
X, y = make_classification(n_samples = 1000, n_features = 5, n_classes = 2, random_state = 42)
# 将数据划分为训练集和测试集,test_size表示测试集占比
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)
# 计算预测准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"预测准确率: {accuracy}")
- 决策树
- 解决问题:可用于分类和回归任务。通过对特征进行递归划分,构建树形结构来做出决策,例如判断一个人是否适合某项工作,依据年龄、学历、工作经验等特征。- 案例:根据天气的特征(温度、湿度、风速等)判断是否适合户外运动。- 框架/库: scikit - learn 库中的 DecisionTreeClassifier (用于分类)和 DecisionTreeRegressor (用于回归)类。
from sklearn.tree import DecisionTreeClassifier
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 = 5, n_classes = 2, random_state = 42)
# 划分训练集和测试集
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)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"预测准确率: {accuracy}")
- 随机森林
- 解决问题:基于决策树的集成学习算法,可用于分类和回归,通过构建多个决策树并综合它们的预测结果,有效解决决策树过拟合问题,提高模型的稳定性和泛化能力,常用于图像分类、疾病诊断等领域。- 案例:根据患者的症状、检查结果等特征预测患者是否患有某种疾病。- 框架/库: scikit - learn 库中的 RandomForestClassifier (分类)和 RandomForestRegressor (回归)类。
from sklearn.ensemble import RandomForestClassifier
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 = 10, n_classes = 2, random_state = 42)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 42)
# 创建随机森林分类模型对象,n_estimators表示决策树的数量
model = RandomForestClassifier(n_estimators = 100)
# 训练模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"预测准确率: {accuracy}")
- 支持向量机(SVM)
- 解决问题:擅长解决二分类问题,在高维空间中寻找一个最优超平面将不同类别的数据分开,并使间隔最大化。对于非线性可分的数据,通过核函数将数据映射到高维空间来实现分类,常用于文本分类、图像分类等领域。- 案例:区分猫和狗的图片,通过提取图片特征,利用SVM进行分类。- 框架/库: scikit - learn 库中的 SVC (支持向量分类)类。
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 = 20, n_classes = 2, 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()
# 训练模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"预测准确率: {accuracy}")
- 朴素贝叶斯算法
- 解决问题:常用于文本分类(如新闻分类、垃圾邮件过滤)、情感分析等场景。基于贝叶斯定理,假设特征之间相互独立,通过计算后验概率判断样本所属类别。- 案例:判断一条短信是否为垃圾短信,根据短信内容中的词汇来判断。- 框架/库: scikit - learn 库中包含多种朴素贝叶斯的实现,如 MultinomialNB (适用于离散特征,如文本分类中的词频)。
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.datasets import load_files
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载短信数据集,这里假设数据集按垃圾短信和正常短信分两个文件夹存放
data = load_files('sms_dataset')
X = data.data
y = data.target
# 将文本数据转换为词频矩阵
vectorizer = CountVectorizer()
X = vectorizer.fit_transform([text.decode('utf - 8') for text in X])
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 42)
# 创建多项式朴素贝叶斯模型对象
model = MultinomialNB()
# 训练模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"预测准确率: {accuracy}")
- K - 近邻算法(KNN)
- 解决问题:适用于分类和回归任务。通过计算待预测样本与训练集中样本的距离,取最近的K个邻居,根据邻居类别(分类)或数值(回归)来预测,例如图像识别、预测电影评分等。- 案例:预测一个水果是苹果还是橙子,根据水果的颜色、大小、重量等特征,与已知水果样本对比。- 框架/库: scikit - learn 库中的 KNeighborsClassifier (分类)和 KNeighborsRegressor (回归)类。
from sklearn.neighbors import KNeighborsClassifier
import numpy as np
# 水果特征数据,每行表示一个水果样本的特征(颜色、大小、重量)
X = np.array([[1, 100, 200], [2, 120, 250], [1, 90, 180], [2, 110, 220]])
# 对应的水果类别,1代表苹果,2代表橙子
y = np.array([1, 2, 1, 2])
# 创建KNN分类模型对象,n_neighbors表示K值
model = KNeighborsClassifier(n_neighbors = 3)
# 训练模型
model.fit(X, y)
# 准备预测的新水果特征
new_fruit = np.array([[1, 105, 210]])
# 进行预测
predicted_fruit = model.predict(new_fruit)
print(f"预测水果类别: {predicted_fruit[0]}")
- K - Means聚类
- 解决问题:无监督学习中的聚类算法,将数据点划分为K个簇,使得同一簇内的数据点相似度较高,不同簇之间的数据点相似度较低,常用于客户细分、图像分割、数据降维等场景。- 案例:根据客户的消费金额和消费频率对客户进行聚类,将相似消费行为的客户归为一类。- 框架/库: scikit - learn 库中的 KMeans 类。
from sklearn.cluster import KMeans
import numpy as np
import matplotlib.pyplot as plt
# 模拟客户消费数据,第一列是消费金额,第二列是消费频率
X = np.array([[100, 5], [200, 8], [300, 10], [50, 3], [150, 6]])
# 创建KMeans聚类模型对象,n_clusters表示簇的数量
model = KMeans(n_clusters = 2)
# 训练模型
model.fit(X)
# 获取聚类标签
labels = model.labels_
# 获取聚类中心
centroids = model.cluster_centers_
# 绘制聚类结果
plt.scatter(X[:, 0], X[:, 1], c = labels)
plt.scatter(centroids[:, 0], centroids[:, 1], marker='X', s = 200, linewidths = 3, color='r')
plt.show()
结合上面,你应该明白,如今在人工智能领域,大部分常见的算法和理论都有对应的库和框架,这极大地降低了开发门槛,让不同层次的人员都能参与到人工智能项目中。