如何用 Python 進(jìn)行數(shù)據(jù)挖掘七個(gè)算法介紹
數(shù)據(jù)挖掘是利用計(jì)算機(jī)技術(shù)從大量數(shù)據(jù)中提取有用信息的過(guò)程。Python 作為一種強(qiáng)大的編程語(yǔ)言,在數(shù)據(jù)挖掘領(lǐng)域有著廣泛的應(yīng)用。本文將介紹7種常用的Python數(shù)據(jù)挖掘算法,并通過(guò)實(shí)際代碼示例幫助你更好地理解和應(yīng)用這些算法。
1. 決策樹(shù)
決策樹(shù)是一種用于分類(lèi)和回歸任務(wù)的監(jiān)督學(xué)習(xí)算法。它通過(guò)樹(shù)狀結(jié)構(gòu)來(lái)表示決策過(guò)程,每個(gè)內(nèi)部節(jié)點(diǎn)表示一個(gè)屬性上的測(cè)試,每個(gè)分支代表一個(gè)測(cè)試結(jié)果,每個(gè)葉節(jié)點(diǎn)代表一種分類(lèi)結(jié)果。
示例代碼:
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
# 加載數(shù)據(jù)集
data = load_iris()
X = data.data
y = data.target
# 劃分訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 創(chuàng)建決策樹(shù)模型
clf = DecisionTreeClassifier()
# 訓(xùn)練模型
clf.fit(X_train, y_train)
# 預(yù)測(cè)
y_pred = clf.predict(X_test)
# 計(jì)算準(zhǔn)確率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')
2. 支持向量機(jī) (SVM)
支持向量機(jī)是一種用于分類(lèi)和回歸任務(wù)的監(jiān)督學(xué)習(xí)算法。它通過(guò)找到一個(gè)超平面來(lái)最大化不同類(lèi)別之間的間隔,從而實(shí)現(xiàn)分類(lèi)。
示例代碼:
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
# 加載數(shù)據(jù)集
data = load_breast_cancer()
X = data.data
y = data.target
# 劃分訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 創(chuàng)建SVM模型
clf = SVC()
# 訓(xùn)練模型
clf.fit(X_train, y_train)
# 預(yù)測(cè)
y_pred = clf.predict(X_test)
# 計(jì)算準(zhǔn)確率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')
3. K-近鄰 (KNN)
K-近鄰算法是一種基于實(shí)例的學(xué)習(xí)方法,用于分類(lèi)和回歸任務(wù)。它通過(guò)計(jì)算樣本之間的距離來(lái)確定最近的K個(gè)鄰居,并根據(jù)這些鄰居的標(biāo)簽來(lái)進(jìn)行預(yù)測(cè)。
示例代碼:
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
# 加載數(shù)據(jù)集
data = load_digits()
X = data.data
y = data.target
# 劃分訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 創(chuàng)建KNN模型
clf = KNeighborsClassifier(n_neighbors=3)
# 訓(xùn)練模型
clf.fit(X_train, y_train)
# 預(yù)測(cè)
y_pred = clf.predict(X_test)
# 計(jì)算準(zhǔn)確率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')
4. 樸素貝葉斯
樸素貝葉斯是一種基于貝葉斯定理的分類(lèi)算法,假設(shè)特征之間相互獨(dú)立。它常用于文本分類(lèi)、垃圾郵件過(guò)濾等任務(wù)。
示例代碼:
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
# 加載數(shù)據(jù)集
data = fetch_20newsgroups(subset='all')
X = data.data
y = data.target
# 將文本數(shù)據(jù)轉(zhuǎn)換為詞頻矩陣
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(X)
# 劃分訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 創(chuàng)建樸素貝葉斯模型
clf = MultinomialNB()
# 訓(xùn)練模型
clf.fit(X_train, y_train)
# 預(yù)測(cè)
y_pred = clf.predict(X_test)
# 計(jì)算準(zhǔn)確率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')
5. 隨機(jī)森林
隨機(jī)森林是一種集成學(xué)習(xí)方法,通過(guò)構(gòu)建多個(gè)決策樹(shù)并取其平均結(jié)果來(lái)提高預(yù)測(cè)的準(zhǔn)確性和穩(wěn)定性。
示例代碼:
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
# 加載數(shù)據(jù)集
data = load_boston()
X = data.data
y = data.target
# 劃分訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 創(chuàng)建隨機(jī)森林模型
reg = RandomForestRegressor(n_estimators=100)
# 訓(xùn)練模型
reg.fit(X_train, y_train)
# 預(yù)測(cè)
y_pred = reg.predict(X_test)
# 計(jì)算均方誤差
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse:.2f}')
6. 線性回歸
線性回歸是一種用于預(yù)測(cè)連續(xù)值的監(jiān)督學(xué)習(xí)算法。它通過(guò)擬合一條直線來(lái)最小化預(yù)測(cè)值與實(shí)際值之間的差異。
示例代碼:
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
# 生成模擬數(shù)據(jù)
np.random.seed(42)
X = np.random.rand(100, 1) * 10
y = 2 * X + 1 + np.random.randn(100, 1)
# 劃分訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 創(chuàng)建線性回歸模型
reg = LinearRegression()
# 訓(xùn)練模型
reg.fit(X_train, y_train)
# 預(yù)測(cè)
y_pred = reg.predict(X_test)
# 計(jì)算均方誤差
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse:.2f}')
# 繪制結(jié)果
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-均值聚類(lèi)
K-均值聚類(lèi)是一種無(wú)監(jiān)督學(xué)習(xí)算法,用于將數(shù)據(jù)分為K個(gè)簇。它通過(guò)迭代地更新簇中心來(lái)最小化簇內(nèi)樣本之間的距離。
示例代碼:
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# 生成模擬數(shù)據(jù)
X, _ = make_blobs(n_samples=300, centers=4, random_state=42)
# 創(chuàng)建K-均值聚類(lèi)模型
kmeans = KMeans(n_clusters=4)
# 訓(xùn)練模型
kmeans.fit(X)
# 預(yù)測(cè)簇標(biāo)簽
labels = kmeans.labels_
# 繪制結(jié)果
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()
實(shí)戰(zhàn)案例:電影推薦系統(tǒng)
假設(shè)我們要構(gòu)建一個(gè)簡(jiǎn)單的電影推薦系統(tǒng),使用用戶的歷史評(píng)分?jǐn)?shù)據(jù)來(lái)推薦新的電影。我們將使用協(xié)同過(guò)濾算法,這是一種基于用戶行為的推薦方法。
數(shù)據(jù)準(zhǔn)備:
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
# 加載數(shù)據(jù)
data = pd.read_csv('ratings.csv')
# 定義數(shù)據(jù)格式
reader = Reader(rating_scale=(1, 5))
# 加載數(shù)據(jù)集
data = Dataset.load_from_df(data[['userId', 'movieId', 'rating']], reader)
# 劃分訓(xùn)練集和測(cè)試集
trainset, testset = train_test_split(data, test_size=0.2)
# 創(chuàng)建KNNBasic模型
algo = KNNBasic()
# 訓(xùn)練模型
algo.fit(trainset)
# 預(yù)測(cè)
predictions = algo.test(testset)
# 評(píng)估模型
results = cross_validate(algo, data, measures=['RMSE', 'MAE'], cv=5, verbose=True)
推薦新電影:
def get_top_n_recommendations(user_id, n=10):
# 獲取用戶未評(píng)分的電影
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']))
# 預(yù)測(cè)評(píng)分
predictions = [algo.predict(user_id, movie_id) for movie_id in unrated_movies]
# 按預(yù)測(cè)評(píng)分排序
top_n = sorted(predictions, key=lambda x: x.est, reverse=True)[:n]
return top_n
# 獲取用戶1的前10個(gè)推薦電影
recommendations = get_top_n_recommendations(1)
for rec in recommendations:
print(f'Movie ID: {rec.iid}, Predicted Rating: {rec.est:.2f}')
總結(jié)
本文介紹了7種常用的Python數(shù)據(jù)挖掘算法,包括決策樹(shù)、支持向量機(jī)、K-近鄰、樸素貝葉斯、隨機(jī)森林、線性回歸和K-均值聚類(lèi)。每種算法都有詳細(xì)的理論講解和實(shí)際代碼示例,幫助你更好地理解和應(yīng)用這些算法。最后,我們通過(guò)一個(gè)電影推薦系統(tǒng)的實(shí)戰(zhàn)案例,展示了如何將這些算法應(yīng)用于實(shí)際問(wèn)題中。