sklearn模型使用方法

目录

学习目的

一、代码规范

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

### 回答1: sklearn中的DBSCAN是一种密度聚类算法,用于发现具有相似密度的数据点。使用方法如下: 1. 导入DBSCAN模块: ```python from sklearn.cluster import DBSCAN ``` 2. 创建DBSCAN对象: ```python dbscan = DBSCAN(eps=.5, min_samples=5) ``` 其中,eps是邻域半径,min_samples是邻域内最小样本数。 3. 训练模型: ```python dbscan.fit(X) ``` 其中,X是数据集。 4. 获取聚类结果: ```python labels = dbscan.labels_ ``` labels是一个数组,表示每个样本所属的簇标签。如果样本不属于任何簇,则标签为-1。 5. 获取核心样本: ```python core_samples_mask = np.zeros_like(labels, dtype=bool) core_samples_mask[dbscan.core_sample_indices_] = True ``` core_sample_indices_是核心样本的索引。 6. 获取簇的数量: ```python n_clusters_ = len(set(labels)) - (1 if -1 in labels else ) ``` 如果有噪声点,则需要减去1。 7. 获取噪声点的数量: ```python n_noise_ = list(labels).count(-1) ``` count(-1)表示标签为-1的样本数量。 以上就是sklearn中DBSCAN的使用方法。 ### 回答2: DBSCAN是一种非常经典的密度聚类算法,它可以识别探索数据中的稠密区域,并将这些区域划分为簇。sklearn是一个流行的Python机器学习库,提供了DBSCAN算法的实现。以下是使用sklearn中DBSCAN的基本步骤: 1. 导入DBSCAN模块: ```python from sklearn.cluster import DBSCAN ``` 2. 创建DBSCAN对象,指定参数: ```python dbscan = DBSCAN(eps=0.5, min_samples=5) ``` 其中,eps是邻域的距离阈值,min_samples是邻域中的点数阈值。 3. 调用fit_predict()方法,对数据进行聚类: ```python dbscan.fit_predict(data) ``` 其中,data是要聚类的数据。 4. 获取聚类结果: ```python dbscan.labels_ ``` 该方法返回一个标签数组,表示每个数据点所属的簇的编号。如果一个点的标签为-1,则表示该点是噪声点,不属于任何簇。 5. 可选步骤:调整参数并重新运行DBSCAN 如果第一次运行DBSCAN没有得到满意的结果,可以调整eps和min_samples参数,并重新运行DBSCAN算法。 DBSCAN算法的结果取决于eps和min_samples的取值,需要根据数据的性质和聚类目的来调整这些参数。如果eps取值过小,将导致所有点都成为噪声点,没有任何簇被找到;如果eps取值过大,则会把所有点划分到同一个簇中。如果min_samples取值过小,则会过度聚类,产生许多小的簇,如果min_samples取值过大,则会把所有点都划分到一个簇中。 总之,使用sklearn中的DBSCAN算法进行聚类非常简单。只需导入模块、创建对象、拟合数据、获取标签即可得到簇的划分结果。但要得到令人满意的聚类结果,需要进行参数的优化和调整,这需要一定的经验和技巧。 ### 回答3: 介绍 DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,它不需要预先指定簇的个数,能够识别任意形状的簇,并能够有效处理噪声数据。在scikit-learn中,DBSCAN算法被实现在sklearn.cluster.DBSCAN中。 使用方法 下面是用sklearn的DBSCAN进行聚类分析的一般流程: 1、导入库 首先,需要导入相关的库,即sklearn.cluster和sklearn.preprocessing,其中sklearn.preprocessing库是用于数据预处理的工具库,可以进行标准化、归一化等操作。 from sklearn.cluster import DBSCAN from sklearn.preprocessing import StandardScaler 2、准备数据 对聚类算法而言,数据是关键。需要对数据进行处理和预处理。可以使用StandardScaler来对数据进行标准化处理,使得数据的分布符合均值为0,标准差为1的正态分布。 X = StandardScaler().fit_transform(X) 其中,X是准备使用的数据集。 3、构建DBSCAN模型sklearn.cluster.DBSCAN构建一个DBSCAN模型,并指定eps和min_samples两个参数。eps表示两个样本之间的最大距离,min_samples表示簇的最小样本数,这两个参数对于聚类效果有着至关重要的影响。 dbscan = DBSCAN(eps=2, min_samples=3) 其中,eps和min_samples根据不同的数据集,需要进行调节以取得最佳的聚类效果。 4、训练模型并进行预测 用fit_predict函数对DBSCAN模型进行训练和预测,产生对所有样本的标签输出。标签输出是一个numpy数组,之后可以使用matplotlib对聚类结果进行可视化。 y_pred = dbscan.fit_predict(X) 5、可视化结果 使用matplotlib将标签输出可视化,以便对聚类结果进行观察。 import matplotlib.pyplot as plt plt.scatter(X[:,0], X[:,1], c=y_pred) plt.show() 细节说明 值得注意的是,距离度量方式需要自行指定,默认值是欧几里得距离。 dbscan = DBSCAN(eps=1.5, min_samples=3, metric='cosine') 在实际应用中,同时应注意不同的eps与min_samples搭配产生的聚类结果的差异,认真观察样本点的分布,如图: image.png 如果聚类数目过多,需要进行聚类结果的后处理,以减少簇的数量,可以使用sklearn.cluster.MeanShift或者sklearn.cluster.AgglomerativeClustering等算法对DBSCAN的聚类结果进行优化和后处理。 总结 本文简单介绍了sklearn的DBSCAN聚类算法的使用方法和一般流程,也讲解了一些算法参数和特性的细节说明。使用DBSCAN算法进行聚类有其独特的优点和不足,针对特定的数据集和应用场景,要谨慎调节算法参数,观察聚类效果,选择一个最优的聚类算法。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值