目录
学习目的
-
理解并掌握机器学习的常用模型
-
理解并掌握模型生成的工作过程
-
掌握模型评价、调优的方式和方法
-
掌握集成模型的方法
-
sklearn中存在许多不同的机器学习模型可以直接调用,相比于自己撰写代码,直接使用sklearn的模型可以大大提高效率。
一、代码规范
由于代码的不规范和不稳定,经常会出现错误,耽误了时间和进程
改变的对策:
稳定关键语句的语法和关联,所有的输入参数以变量的方式赋值,关键语句不再调整
1.1简单项目进入
1.2添加项目模版(SimpleML)
通过一个项目进入学习,从而提高学习效率
二、生成模型
2.1、模型的常用方法
sklearn中所有的模型都有四个固定且常用的方法,分别是
model.fit、model.predict、model.get_params、model.score。
# 用于模型训练
model.fit(X_train, y_train)
# 用于模型预测
model.predict(X_test)
# 获得模型参数
model.get_params()
# 进行模型打分
model.score(X_test, y_test)
2.2、模型的生成和似合
以 KMeans 模型为例
clf=KMeans(n_clusters=5) #创建分类器对象
fit_clf=clf.fit(X) #用训练器数据拟合分类器模型
clf.predict(X) #也可以给新数据数据对其预测
print(clf.cluster_centers_) #输出5个类的聚类中心
y_pred = clf.fit_predict(X) #用训练器数据X拟合分类器模型并对训练器数据X进行预测
print(y_pred) #输出预测结果
sklearn中调用某个机器学习模型model.predict(x)和model.predict_proba(x)的区别
model.predict_proba(x)不同于model.predict(),它返回的预测值为获得所有结果的概率。(有多少个分类结果,每行就有多少个概率,对每个结果都有一个概率值,如0、1两分类就有两个概率)
三、sklearn 中的模型
3.1、线性回归
sklearn中线性回归使用最小二乘法实现,使用起来非常简单。
线性回归是回归问题,score使用R2系数作为评价标准。
该方法通过调用如下函数实现。
相关代码如下:
# 导入必要的库
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn import metrics
import numpy as np
import pandas as pd
# 假设我们有一个数据集,这里为了简单起见,我们直接创建一些模拟数据
np.random.seed(0) # 为了结果的可复现性
X = np.random.rand(100, 1) # 100个样本,每个样本1个特征
y = 3 * X.squeeze() + 2 + np.random.randn(100, 1) # 线性关系加上一些噪声
# 将数据转换为pandas DataFrame(虽然这不是必须的,但这样做通常更方便)
df = pd.DataFrame(X, columns=['feature'])
df['target'] = y.squeeze()
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(df['feature'], df['target'], test_size=0.2, random_state=42)
# 因为scikit-learn的模型需要输入是二维数组,所以我们需要将一维的X_train和X_test转换为二维
X_train = X_train.values.reshape(-1, 1)
X_test = X_test.values.reshape(-1, 1)
# 创建并训练线性回归模型
model = LinearRegression()
model.fit(X_train, y_train)
# 使用模型进行预测
y_pred = model.predict(X_test)
# 输出模型的系数和截距
print('Coefficients: \n', model.coef_)
print('Intercept: \n', model.intercept_)
# 评估模型
print('Mean Absolute Error:', metrics.mean_absolute_error(y_test, y_pred))
print('Mean Squared Error:', metrics.mean_squared_error(y_test, y_pred))
print('Root Mean Squared Error:', np.sqrt(metrics.mean_squared_error(y_test, y_pred)))
3.2、逻辑回归
logistic回归是一种广义线性回归,可以用于计算概率。
即线性回归用于计算回归,逻辑回归用于分类。
相关代码如下:
# 导入必要的库
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn import metrics
import numpy as np
import pandas as pd
# 假设我们有一个二分类问题的数据集,这里为了简单起见,我们直接创建一些模拟数据
np.random.seed(0) # 为了结果的可复现性
X = np.random.rand(100, 2) # 100个样本,每个样本2个特征
y = (X[:, 0] + X[:, 1] > 1).astype(int) # 构造一个简单的线性可分数据集
# 将数据转换为pandas DataFrame(虽然这不是必须的,但这样做通常更方便)
df = pd.DataFrame(X, columns=['feature1', 'feature2'])
df['target'] = y
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(df[['feature1', 'feature2']], df['target'], test_size=0.2, random_state=42)
# 创建并训练逻辑回归模型
model = LogisticRegression(solver='liblinear', random_state=42) # 使用liblinear求解器,因为数据集小
model.fit(X_train, y_train)
# 使用模型进行预测
y_pred = model.predict(X_test)
# 输出模型的系数和截距
print('Coefficients: \n', model.coef_)
print('Intercept: \n', model.intercept_)
# 评估模型
print('Accuracy:', metrics.accuracy_score(y_test, y_pred))
print('Classification Report:\n', metrics.classification_report(y_test, y_pred))
3.3、朴素贝叶斯算法NB
朴素贝叶斯算法在许多应用场景中都有广泛的应用,特别适合文本分类、垃圾邮件过滤、情感分析、新闻分类等任务。同时,它也可以用于实时分类任务,如实时推荐系统、实时广告点击率预测等。
相关代码如下:
# 导入必要的库
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score
# 加载数据集,这里以鸢尾花数据集为例(虽然它有3个类别,但我们可以只取前两个类别作为二分类问题)
iris = load_iris()
X = iris.data[iris.target != 2] # 只保留前两个类别(0和1)的数据
y = iris.target[iris.target != 2]
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建高斯朴素贝叶斯分类器对象
gnb = GaussianNB()
# 使用训练集训练模型
gnb.fit(X_train, y_train)
# 使用测试集进行预测
y_pred = gnb.predict(X_test)
# 计算并打印预测准确度
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: ", accuracy)
3.4、决策树DT
根据选择的特征对数据集进行划分,并递归地在子数据集上构建决策树。在决策树的每个非叶子节点上,根据特征选择的结果选择最优划分特征,并根据该特征的不同取值将数据划分到不同的子节点中。
相关代码如下:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建决策树分类器对象
clf = DecisionTreeClassifier(random_state=42)
# 使用训练集训练模型
clf.fit(X_train, y_train)
# 使用测试集进行预测
y_pred = clf.predict(X_test)
# 计算并打印预测准确度
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: ", accuracy)
3.5、支持向量机SVM
SVM的应用场景广泛,包括人像识别、文本分类、智能家居设备的故障诊断和预测、交通流量预测和交通事故预警、疾病预测和健康风险评估、工业设备的故障诊断和质量控制等。
相关代码如下:
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 数据标准化(对于SVM来说,这一步通常是必要的)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 创建SVM分类器对象,这里使用线性核函数
svm_clf = SVC(kernel='linear', C=1, random_state=42)
# 使用训练集训练模型
svm_clf.fit(X_train, y_train)
# 使用测试集进行预测
y_pred = svm_clf.predict(X_test)
# 计算并打印预测准确度
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: ", accuracy)
3.6、k近邻算法KNN
k近邻算法(k-Nearest Neighbors,简称KNN)是一种基本的机器学习算法,用于分类和回归问题。它的工作原理是:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。
相关代码如下:
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 数据标准化(对于KNN来说,这一步通常是必要的)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 创建KNN分类器对象,设置邻居数为3
knn_clf = KNeighborsClassifier(n_neighbors=3)
# 使用训练集训练模型
knn_clf.fit(X_train, y_train)
# 使用测试集进行预测
y_pred = knn_clf.predict(X_test)
# 计算并打印预测准确度
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: ", accuracy)
3.7、多层感知机(神经网络)
多层感知机(MLP,Multi-Layer Perceptron)是一种基本的神经网络模型,也被称为前馈神经网络或深度前馈网络。它主要由输入层、隐藏层和输出层组成,每一层都由多个神经元组成,其中隐藏层可以有多个。
相关代码如下:
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score
# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 数据标准化(对于神经网络来说,这一步通常是必要的)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 创建MLP分类器对象
mlp = MLPClassifier(hidden_layer_sizes=(10,), max_iter=1000, random_state=42)
# 使用训练集训练模型
mlp.fit(X_train, y_train)
# 使用测试集进行预测
y_pred = mlp.predict(X_test)
# 计算并打印预测准确度
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: ", accuracy)
3.8、sklearn中的朴素贝叶斯
不同的贝叶斯算法其实是假设 f(x) 满足的统计学中的分布的不同,最常见的就是高斯分布、伯努利分布、多项式分布。Sklearn基于这些分布以及这些分布上的概率估计的改进,为我们提供了四个朴素贝叶斯的分类器。
类 | 含义 |
---|---|
naive_bayes.BernoulliNB | 伯努利分布下的朴素贝叶斯 |
naive_bayes.GaussianNB | 高斯分布下的朴素贝叶斯 |
naive_bayes.MultinomialNB | 多项式分布下的朴素贝叶斯 |
naive_bayes.ComplementNB | 补集朴素贝叶斯 |
虽然朴素贝叶斯使用了过于简化的假设,这个分类器在文档分类和垃圾邮件过滤等领域中都运行良好。而且由于贝叶斯是从概率角度进行估计,它所需要的样本量比较少,极端情况下甚至我们可以使用 1% 的数据作为训练集,依然可以得到很好的拟合效果。当然,如果样本量少于特征数目,贝叶斯的效果就会被削弱。
朴素贝叶斯运行速度相对更快,因为求解本质是在每个特征上单独对概率进行计算,然后再求乘积,所以每个特征上的计算可以是独立并且并行的。不过贝叶斯的运行效果相对较差,所以贝叶斯的接口调用的predict_proba其实也不是总指向真正的分类结果,这一点需要注意。
各个朴素贝叶斯在不同数据集上的效果
四、总结
4.1、学习收获
通过学习sklearn
中的不同模型,深入理解了机器学习中的基本概念,如监督学习、无监督学习、分类、回归、聚类、降维等,为后续的深入研究打下了坚实的基础。sklearn
提供了大量的机器学习算法,包括线性模型、决策树、随机森林、支持向量机、朴素贝叶斯等。通过学习这些算法,能够根据不同的任务需求选择合适的模型,并理解其背后的原理。
4.2、应用模型的好处
使用机器学习模型,我们可以从大量数据中提取有价值的信息,辅助我们做出更准确的决策。无论是在金融、医疗、电商还是其他领域,机器学习模型都能帮助我们快速、准确地分析数据,提高决策效率。机器学习模型具有很好的适应性,能够处理各种类型的数据和任务。无论是分类、回归、聚类还是其他任务,我们都可以找到合适的模型来处理。
4.3、深度学习与扩展
如果有需要可以查看:
http://机器学习 | Sklearn中的朴素贝叶斯全解-腾讯云开发者社区-腾讯云
想继续深入学习可以查看: