如何用 Python 進行數據挖掘七個算法介紹
數據挖掘是利用計算機技術從大量數據中提取有用信息的過程。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-均值聚類。每種算法都有詳細的理論講解和實際代碼示例,幫助你更好地理解和應用這些算法。最后,我們通過一個電影推薦系統的實戰案例,展示了如何將這些算法應用于實際問題中。