数据挖掘是利用计算机技术从大量数据中提取有用信息的过程。Python 作为一种强大的编程语言,在数据挖掘领域有着广泛的应用。本文将介绍7种常用的Python数据挖掘算法,并通过实际代码示例帮助你更好地理解和应用这些算法。
1. 决策树
决策树是一种用于分类和回归任务的监督学习算法。它通过树状结构来表示决策过程,每个内部节点表示一个属性上的测试,每个分支代表一个测试结果,每个叶节点代表一种分类结果。
示例代码:
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载数据集
data = load_iris()
X = data.data
y = data.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 创建决策树模型
clf = DecisionTreeClassifier()
# 训练模型
clf.fit(X_train, y_train)
# 预测
y_pred = clf.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')
2. 支持向量机 (SVM)
支持向量机是一种用于分类和回归任务的监督学习算法。它通过找到一个超平面来最大化不同类别之间的间隔,从而实现分类。
示例代码:
from sklearn.datasets import load_breast_cancer
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载数据集
data = load_breast_cancer()
X = data.data
y = data.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 创建SVM模型
clf = SVC()
# 训练模型
clf.fit(X_train, y_train)
# 预测
y_pred = clf.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')
3. K-近邻 (KNN)
K-近邻算法是一种基于实例的学习方法,用于分类和回归任务。它通过计算样本之间的距离来确定最近的K个邻居,并根据这些邻居的标签来进行预测。
示例代码:
from sklearn.datasets import load_digits
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载数据集
data = load_digits()
X = data.data
y = data.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 创建KNN模型
clf = KNeighborsClassifier(n_neighbors=3)
# 训练模型
clf.fit(X_train, y_train)
# 预测
y_pred = clf.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')
4. 朴素贝叶斯
朴素贝叶斯是一种基于贝叶斯定理的分类算法,假设特征之间相互独立。它常用于文本分类、垃圾邮件过滤等任务。
示例代码:
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载数据集
data = fetch_20newsgroups(subset='all')
X = data.data
y = data.target
# 将文本数据转换为词频矩阵
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(X)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 创建朴素贝叶斯模型
clf = MultinomialNB()
# 训练模型
clf.fit(X_train, y_train)
# 预测
y_pred = clf.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')
5. 随机森林
随机森林是一种集成学习方法,通过构建多个决策树并取其平均结果来提高预测的准确性和稳定性。
示例代码:
from sklearn.datasets import load_boston
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 加载数据集
data = load_boston()
X = data.data
y = data.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 创建随机森林模型
reg = RandomForestRegressor(n_estimators=100)
# 训练模型
reg.fit(X_train, y_train)
# 预测
y_pred = reg.predict(X_test)
# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse:.2f}')
6. 线性回归
线性回归是一种用于预测连续值的监督学习算法。它通过拟合一条直线来最小化预测值与实际值之间的差异。
示例代码:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 生成模拟数据
np.random.seed(42)
X = np.random.rand(100, 1) * 10
y = 2 * X + 1 + np.random.randn(100, 1)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 创建线性回归模型
reg = LinearRegression()
# 训练模型
reg.fit(X_train, y_train)
# 预测
y_pred = reg.predict(X_test)
# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse:.2f}')
# 绘制结果
plt.scatter(X_test, y_test, color='blue', label='Actual')
plt.plot(X_test, y_pred, color='red', label='Predicted')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()
7. K-均值聚类
K-均值聚类是一种无监督学习算法,用于将数据分为K个簇。它通过迭代地更新簇中心来最小化簇内样本之间的距离。
示例代码:
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# 生成模拟数据
X, _ = make_blobs(n_samples=300, centers=4, random_state=42)
# 创建K-均值聚类模型
kmeans = KMeans(n_clusters=4)
# 训练模型
kmeans.fit(X)
# 预测簇标签
labels = kmeans.labels_
# 绘制结果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=200, c='red', marker='X')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('K-Means Clustering')
plt.show()
实战案例:电影推荐系统
假设我们要构建一个简单的电影推荐系统,使用用户的历史评分数据来推荐新的电影。我们将使用协同过滤算法,这是一种基于用户行为的推荐方法。
数据准备:
import pandas as pd
from sklearn.model_selection import train_test_split
from surprise import Dataset, Reader, KNNBasic
from surprise.model_selection import cross_validate
# 加载数据
data = pd.read_csv('ratings.csv')
# 定义数据格式
reader = Reader(rating_scale=(1, 5))
# 加载数据集
data = Dataset.load_from_df(data[['userId', 'movieId', 'rating']], reader)
# 划分训练集和测试集
trainset, testset = train_test_split(data, test_size=0.2)
# 创建KNNBasic模型
algo = KNNBasic()
# 训练模型
algo.fit(trainset)
# 预测
predictions = algo.test(testset)
# 评估模型
results = cross_validate(algo, data, measures=['RMSE', 'MAE'], cv=5, verbose=True)
推荐新电影:
def get_top_n_recommendations(user_id, n=10):
# 获取用户未评分的电影
user_ratings = data.df[data.df['userId'] == user_id]
all_movies = data.df['movieId'].unique()
unrated_movies = list(set(all_movies) - set(user_ratings['movieId']))
# 预测评分
predictions = [algo.predict(user_id, movie_id) for movie_id in unrated_movies]
# 按预测评分排序
top_n = sorted(predictions, key=lambda x: x.est, reverse=True)[:n]
return top_n
# 获取用户1的前10个推荐电影
recommendations = get_top_n_recommendations(1)
for rec in recommendations:
print(f'Movie ID: {rec.iid}, Predicted Rating: {rec.est:.2f}')
总结
本文介绍了7种常用的Python数据挖掘算法,包括决策树、支持向量机、K-近邻、朴素贝叶斯、随机森林、线性回归和K-均值聚类。每种算法都有详细的理论讲解和实际代码示例,帮助你更好地理解和应用这些算法。最后,我们通过一个电影推荐系统的实战案例,展示了如何将这些算法应用于实际问题中。