目录

学习目的

一、代码规范

1.1简单项目进入

1.2添加项目模版(SimpleML)

二、生成模型

2.1、模型的常用方法

2.2、模型的生成和似合

三、sklearn 中的模型

3.1、线性回归

2.2、逻辑回归

3.2、朴素贝叶斯算法NB

3.4、决策树DT

3.4、支持向量机SVM

3.5、k近邻算法KNN

3.6、多层感知机(神经网络)

3.6、sklearn中的朴素贝叶斯

四、总结

4.1、学习收获

4.2、应用模型的好处


学习目的

  1. 理解并掌握机器学习的常用模型

  2. 理解并掌握模型生成的工作过程

  3. 掌握模型评价、调优的方式和方法

  4. 掌握集成模型的方法

  5. 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中的朴素贝叶斯全解-腾讯云开发者社区-腾讯云

想继续深入学习可以查看:

http://机器学习 | Sklearn中的朴素贝叶斯全解-腾讯云开发者社区-腾讯云

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐