首页 > 其他分享 >Scikit-learn 十大高级应用实例讲解

Scikit-learn 十大高级应用实例讲解

时间:2024-07-05 13:29:09浏览次数:16  
标签:实例 pred image Scikit train learn test import sklearn

前言

由于这学期的课程项目中都或多或少的涉及到了对 Python Scikit-learn 库的使用,特别是当学到一些机器学习和数据挖掘算法的内容时,基本都会出现 Scikit-learn 这个库。由于平时都是赶学习进度,一致都没有对这个库做个详细的了解,只知道这个库"很强大",但具体到底能用在那些方面?还是有些模糊,我相信对于接触不久的你来说也多少有这种感觉。于是今天我打算好好的熟悉一下,经过一番资料查询,了解了一些,为了方便以后随时翻阅,这里通过文字的形式把它记录下来。

简介

Scikit-learn 是一个强大的 Python 库,主要用于机器学习和数据挖掘。其功能丰富且易于使用,涵盖了分类、回归、聚类、降维、模型选择和预处理等常见的机器学习任务。Scikit-learn 建立在 NumPy、SciPy 和 matplotlib 之上,确保了其高效性和兼容性。

应用领域

Scikit-learn 在多个领域有着广泛的应用,包括但不限于:

  • 金融:股票价格预测、信用评分
  • 医疗:疾病预测、患者分类
  • 市场营销:客户细分、市场趋势分析
  • 图像处理:图像分类、目标检测

掌握 Scikit-learn 的使用,可以帮助你快速原型化和实现机器学习模型,从而更高效地解决项目中的实际问题。

安装 Scikit-learn

安装 Scikit-learn 非常简单,只需在命令行中运行以下命令:

pip install scikit-learn

如何导入 Scikit-learn 库

在 Python 中使用 Scikit-learn 时,首先需要导入该库:

import sklearn

常见用法示例

为了更好的了解和使用这个库,下面我整理了10个用法,都是借助 Scikit-learn 来处理实际项目问题的示例,对于不熟悉这个库的你来说,定是具备一定的参考价值的,建议关注或收藏我的博客,以便来日翻阅。

1. 鸢尾花数据集分类

生活场景:假设我们是一个植物学家,想要分类不同品种的鸢尾花。

解决思路:我们可以使用鸢尾花数据集进行分类,利用 K-近邻(KNN)算法。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
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.3, random_state=42)

# 初始化KNN分类器
knn = KNeighborsClassifier(n_neighbors=3)

# 训练模型
knn.fit(X_train, y_train)

# 预测
y_pred = knn.predict(X_test)

# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')

2. 波士顿房价预测

生活场景:作为一个房地产经纪人,您希望根据房屋特征预测其价格。

解决思路:我们可以使用波士顿房价数据集,采用线性回归模型进行预测。

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# 加载数据集
boston = load_boston()
X = boston.data
y = boston.target

# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 初始化线性回归模型
lr = LinearRegression()

# 训练模型
lr.fit(X_train, y_train)

# 预测
y_pred = lr.predict(X_test)

# 评估模型
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse}')

3. 手写数字识别

生活场景:在一个自动化邮件分类系统中,我们需要识别手写的邮政编码。

解决思路:使用手写数字数据集,通过支持向量机(SVM)进行分类。

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn import svm
from sklearn.metrics import classification_report

# 加载数据集
digits = datasets.load_digits()
X = digits.data
y = digits.target

# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 初始化SVM分类器
clf = svm.SVC(gamma=0.001)

# 训练模型
clf.fit(X_train, y_train)

# 预测
y_pred = clf.predict(X_test)

# 评估模型
print(classification_report(y_test, y_pred))

4. 葡萄酒分类

生活场景:作为一个品酒师,您希望根据化学成分对葡萄酒进行分类。

解决思路:使用葡萄酒数据集,通过随机森林分类器进行分类。

from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# 加载数据集
wine = load_wine()
X = wine.data
y = wine.target

# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 初始化随机森林分类器
rf = RandomForestClassifier(n_estimators=100)

# 训练模型
rf.fit(X_train, y_train)

# 预测
y_pred = rf.predict(X_test)

# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')

5. 乳腺癌检测

生活场景:在医疗领域,您希望根据细胞特征检测乳腺癌。

解决思路:使用乳腺癌数据集,通过逻辑回归模型进行分类。

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# 加载数据集
cancer = load_breast_cancer()
X = cancer.data
y = cancer.target

# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 初始化逻辑回归模型
lr = LogisticRegression(max_iter=10000)

# 训练模型
lr.fit(X_train, y_train)

# 预测
y_pred = lr.predict(X_test)

# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')

6. 客户细分

生活场景:在市场营销中,您希望将客户分成不同的群体,以便进行精准营销。

解决思路:使用客户数据,通过 K-means 聚类算法进行客户细分。

from sklearn.cluster import KMeans
import numpy as np

# 创建模拟数据
X = np.array([[1, 2], [1, 4], [1, 0], 
              [4, 2], [4, 4], [4, 0]])

# 初始化K-means算法
kmeans = KMeans(n_clusters=2, random_state=0)

# 训练模型
kmeans.fit(X)

# 预测
y_kmeans = kmeans.predict(X)

print(f'Cluster centers: {kmeans.cluster_centers_}')
print(f'Cluster labels: {y_kmeans}')

7. 文本分类

生活场景:在一个新闻网站上,您希望根据文章内容对文章进行分类。

解决思路:使用新闻组数据集,通过朴素贝叶斯分类器进行文本分类。

from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline
from sklearn.metrics import accuracy_score

# 加载数据集
data = fetch_20newsgroups()
X, y = data.data, data.target

# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 创建分类管道
model = make_pipeline(TfidfVectorizer(), MultinomialNB())

# 训练模型
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')

8. 股票价格预测

生活场景:作为一个金融分析师,您希望预测股票价格的趋势。

解决思路:使用股票历史数据,通过支持向量回归(SVR)进行预测。

import pandas as pd
import numpy as np
from sklearn.svm import SVR
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# 创建模拟数据
dates = pd.date_range('2021-01-01', periods=200)
prices = np.sin(np.linspace(0, 20, 200)) + np.random.normal(0, 0.5, 200)

# 转换为数据帧
data = pd.DataFrame({'Date': dates, 'Price': prices})
data['Date'] = data['Date'].map(pd.Timestamp.toordinal)

# 特征和标签
X = data['Date'].values.reshape(-

1, 1)
y = data['Price'].values

# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 初始化SVR模型
svr = SVR(kernel='rbf', C=100, gamma=0.1, epsilon=0.1)

# 训练模型
svr.fit(X_train, y_train)

# 预测
y_pred = svr.predict(X_test)

# 评估模型
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse}')

9. 人脸识别

生活场景:在一个安全系统中,您希望实现人脸识别功能。

解决思路:使用人脸数据集,通过主成分分析(PCA)进行特征提取,然后用逻辑回归进行分类。

from sklearn.datasets import fetch_lfw_people
from sklearn.model_selection import train_test_split
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report

# 加载数据集
lfw_people = fetch_lfw_people(min_faces_per_person=70, resize=0.4)
X = lfw_people.data
y = lfw_people.target
target_names = lfw_people.target_names

# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# PCA降维
n_components = 150
pca = PCA(n_components=n_components, whiten=True).fit(X_train)

X_train_pca = pca.transform(X_train)
X_test_pca = pca.transform(X_test)

# 初始化逻辑回归模型
lr = LogisticRegression()

# 训练模型
lr.fit(X_train_pca, y_train)

# 预测
y_pred = lr.predict(X_test_pca)

# 评估模型
print(classification_report(y_test, y_pred, target_names=target_names))

10. 图像压缩

生活场景:在图像处理应用中,您希望减少图像的存储大小,同时保持较好的图像质量。

解决思路:使用图像数据,通过 K-means 聚类进行颜色量化。

from sklearn.cluster import KMeans
import numpy as np
import matplotlib.pyplot as plt
from sklearn.utils import shuffle
from skimage import io

# 加载图像
image = io.imread('image.jpg')
image = np.array(image, dtype=np.float64) / 255

# 将图像数据转化为二维数组
w, h, d = original_shape = tuple(image.shape)
image_array = np.reshape(image, (w * h, d))

# 使用K-means进行颜色量化
n_colors = 64
image_array_sample = shuffle(image_array, random_state=0)[:1000]
kmeans = KMeans(n_clusters=n_colors, random_state=0).fit(image_array_sample)
labels = kmeans.predict(image_array)

# 重建图像
def recreate_image(codebook, labels, w, h):
    d = codebook.shape[1]
    image = np.zeros((w, h, d))
    label_idx = 0
    for i in range(w):
        for j in range(h):
            image[i, j] = codebook[labels[label_idx]]
            label_idx += 1
    return image

# 显示原始和压缩图像
plt.figure(1)
plt.clf()
plt.axis('off')
plt.title('Original image')
plt.imshow(image)

plt.figure(2)
plt.clf()
plt.axis('off')
plt.title('Quantized image')
plt.imshow(recreate_image(kmeans.cluster_centers_, labels, w, h))
plt.show()

通过这些详细的示例,可以看到 Scikit-learn 是如何在各种实际场景中使用并提供解决方案的。Enjoy

标签:实例,pred,image,Scikit,train,learn,test,import,sklearn
From: https://blog.csdn.net/oLawrencedon/article/details/140135206

相关文章

  • RabbitMq shovel 将一个实例的消息转发到另一个实例的队列
    RabbitMqshovel将一个实例的消息转发到另一个实例的队列一、shovel是什么?其实,shovel和上一篇博客中的federation的功能是类似的,都是为了MQ间的消息同步。不同的是,federation需要每个MQ上都配置,它只是个拉取消息的功能,而shovel只需要在一个MQ上配置即可,它是个双向的动作,既能拉......
  • SAAS下一个mysql实例多个租户的库
    在多租户环境中,根据tenantCode字段动态切换数据库是常见的需求。这里将展示如何在SpringBoot和MyBatis项目中实现这一功能,具体步骤包括配置数据源、定义数据源路由逻辑以及在业务代码中使用。1.配置数据源首先,你需要为你的应用配置一个主数据源,这个数据源将被用于连接到包含所......
  • 第四章 对象的实例化内存布局与访问定位
    对象的实例化内存布局与访问定位对象的实例化 对象创建的方式(1)new:最常见的方式、单例类中调用getInstance的静态类方法,XXXFactory的静态方法(2)Class的newInstance方法:在JDK9里面被标记为过时的方法,因为只能调用空参构造器,并且权限必须为public(3)Cons......
  • springboot项目国产化适配,jar改war包碰到的坑-tomcat版本要适配(非法访问:此Web应用程序
    项目原来是jar包运行,国产化适配要改成war包。可以参考https://blog.csdn.net/NAMELZX/article/details/138123405或者其他jar 改成 war 的文章。改成war后,在本地tomcat8上运行,一直报org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading非法......
  • labelme转yolo格式txt 目标检测和实例分割的脚本
    labelme标注后的数据转yolo目标检测格式txt的脚本点击查看代码#https://blog.csdn.net/m0_63172128/article/details/135942221importbase64importrandomimportshutilfromtqdmimporttqdmimportmathimportjsonimportosimportnumpyasnpimportPIL.Imageim......
  • EXCEL中20个数据处理类函数公式应用实例
    在Excel中,数据处理类函数是进行数据分析和报告制作的重要工具。以下列举了另外20个数据处理类函数及其应用实例,这些函数涵盖了一系列高级的数据处理需求,包括统计分析、财务计算、工程计算以及更复杂的文本和日期时间操作。数据统计与分析STDEV.S函数:用于计算样本标准差。例......
  • 修复Scikit-learn中的`ValueError: Input contains NaN`
    @TOC博主默语带您GotoNewWorld.✍个人主页——默语的博客......
  • 24位PCM采样数据和16位相互转换算法实例解析
    一概念1.24bit音频:24bit指使用3个字节记录振幅值,意味可以记录16,777,216种声音振幅的变化,动态范围可达144dB(人耳听觉的动态范围是120dB,超过120dB人耳会痛,所以120dB又称痛阀)。下面是三种常见的音频采样比对表: 2.24位一般是采样深度的概念,还有一......
  • sklearn中的Pipeline:构建无缝机器学习工作流
    sklearn中的Pipeline:构建无缝机器学习工作流在机器学习项目中,数据处理、模型训练和预测往往是一系列复杂且相互依赖的步骤。scikit-learn(简称sklearn)提供了一个强大的工具——Pipeline,用于将这些步骤组织成一个线性的工作流程。本文将详细介绍sklearn中的Pipeline概念、优......
  • 开关电源三种基本拓扑的总结及其应用实例
    一、开关电源拓扑基础传统的开关电源拓扑可分为三种:Buck(降压型)、Boost(升压型)、Buck-Boost(升降压型)。对这三种拓扑归纳如下。1.1Buck-BoostBuck-Boost根据地参考点的位置可以进一步细分为正对负型和负对正型。升降压型拓扑的端口特性为:输入与输出反相;可升压也可降压。电......