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

关注博主 - 领取粉丝专享资源

前言

由于这学期的课程项目中都或多或少的涉及到了对 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 😊! 欢迎访问全糖冲击个人官博

关注 全糖冲击 订阅号

  • 22
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全糖冲击

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值