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