1. 引言
机器学习是人工智能领域的一个关键组成部分,而Scikit-learn是一个功能强大的Python库,它为机器学习提供了大量的工具和算法。本文将通过10个实战案例,帮助读者快速掌握Scikit-learn,并开始自己的机器学习之旅。
2. 案例一:鸢尾花分类
鸢尾花数据集是机器学习中最常用的数据集之一。在这个案例中,我们将使用Scikit-learn的KMeans算法进行聚类,以区分不同种类的鸢尾花。
from sklearn import datasets
from sklearn.cluster import KMeans
# 加载数据集
iris = datasets.load_iris()
X = iris.data
# 使用KMeans聚类
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)
# 输出聚类结果
print(kmeans.labels_)
3. 案例二:房价预测
在这个案例中,我们将使用线性回归模型来预测房价。
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# 加载数据集
boston = datasets.load_boston()
X = boston.data
y = boston.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, 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}")
4. 案例三:乳腺癌检测
使用支持向量机(SVM)算法来分类乳腺癌数据集。
from sklearn import svm
from sklearn.model_selection import cross_val_score
# 加载数据集
breast_cancer = datasets.load_breast_cancer()
X = breast_cancer.data
y = breast_cancer.target
# 创建SVM模型
svm_model = svm.SVC(kernel='linear')
# 使用交叉验证评估模型
scores = cross_val_score(svm_model, X, y, cv=5)
print(f"Cross-validation scores: {scores}")
5. 案例四:垃圾邮件分类
使用朴素贝叶斯分类器来对垃圾邮件进行分类。
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split
# 加载数据集
spam = datasets.load_files('spam')
X, y = spam.data, spam.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建朴素贝叶斯模型
nb = MultinomialNB()
nb.fit(X_train, y_train)
# 评估模型
accuracy = nb.score(X_test, y_test)
print(f"Accuracy: {accuracy}")
6. 案例五:客户细分
使用K-means算法对客户数据进行细分。
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# 假设有一个二维的客户数据集
X = [[1, 2], [1, 4], [1, 0],
[10, 2], [10, 4], [10, 0]]
# 使用K-means算法进行聚类
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)
# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_)
plt.show()
7. 案例六:情感分析
使用逻辑回归模型进行文本的情感分析。
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import LogisticRegression
# 加载情感分析数据集
sentiments = [[0, 'not good'], [1, 'good']]
X = [s[1] for s in sentiments]
y = [s[0] for s in sentiments]
# 文本向量化
vectorizer = CountVectorizer()
X_vectorized = vectorizer.fit_transform(X)
# 创建逻辑回归模型
lr = LogisticRegression()
lr.fit(X_vectorized, y)
# 预测新文本的情感
new_text = ['not so good']
new_text_vectorized = vectorizer.transform(new_text)
prediction = lr.predict(new_text_vectorized)
print(f"Predicted sentiment: {'good' if prediction[0] == 1 else 'not good'}")
8. 案例七:图像识别
使用卷积神经网络(CNN)进行图像识别。
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
# 加载数据集
digits = load_digits()
X = digits.data
y = digits.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建多层感知器模型
mlp = MLPClassifier(hidden_layer_sizes=(50,), max_iter=10000, alpha=1e-4,
solver='sgd', verbose=10, random_state=1,
learning_rate_init=.1)
# 训练模型
mlp.fit(X_train, y_train)
# 评估模型
print("Training set accuracy: {:.2f}".format(mlp.score(X_train, y_train)))
print("Test set accuracy: {:.2f}".format(mlp.score(X_test, y_test)))
9. 案例八:股票市场预测
使用随机森林算法来预测股票市场的涨跌。
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
# 假设有一个包含股票价格和交易量的数据集
X = [[100, 200], [150, 250], [180, 300], [200, 350]]
y = [0, 1, 0, 1] # 0表示下跌,1表示上涨
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建随机森林模型
rf = RandomForestClassifier(n_estimators=100)
rf.fit(X_train, y_train)
# 评估模型
print("Training set accuracy: {:.2f}".format(rf.score(X_train, y_train)))
print("Test set accuracy: {:.2f}".format(rf.score(X_test, y_test)))
10. 案例九:推荐系统
使用协同过滤算法构建一个简单的推荐系统。
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
# 假设有一个用户-物品评分矩阵
ratings = np.array([[5, 3, 0, 0],
[4, 0, 0, 1],
[1, 1, 0, 5],
[1, 0, 0, 4],
[0, 1, 5, 4]])
# 计算用户之间的余弦相似度
user_similarity = cosine_similarity(ratings)
# 为用户2推荐物品
similar_users = user_similarity[1]
indices = np.argsort(similar_users)[::-1]
print(f"Recommended items for user 2: {indices[1:5]}")
11. 案例十:时间序列分析
使用ARIMA模型进行时间序列预测。
from sklearn.linear_model import LinearRegression
from statsmodels.tsa.arima.model import ARIMA
# 假设有一个时间序列数据集
time_series = [10, 12, 13, 14, 15, 16, 17, 18, 19, 20]
# 创建ARIMA模型
model = ARIMA(time_series, order=(1, 1, 1))
model_fit = model.fit(disp=0)
# 预测下一个值
forecast = model_fit.forecast(steps=1)[0]
print(f"Forecasted value: {forecast}")
12. 结语
通过上述10个实战案例,读者应该对Scikit-learn的基本用法有了初步的了解。机器学习是一个不断发展的领域,掌握Scikit-learn只是开始。继续实践和学习,不断探索新的算法和应用场景,你将在这个领域取得更大的成就。
