HoRain云--Scikit-learn实战:从分类到降维全解析

🎬 HoRain云小助手:个人主页
🔥 个人专栏: 《Linux 系列教程》《c语言教程》
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
专栏介绍
|
专栏名称 |
专栏介绍 |
|
本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。 |
|
|
本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制! |
|
|
全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。 |
|
|
本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。 |
|
|
本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。 |
|
|
本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等) |
目录

Scikit-learn(Sklearn)是 Python 中一个功能强大且易于使用的开源机器学习库,它提供了各种监督和无监督学习算法,涵盖了分类、回归、聚类、降维、模型选择和预处理等多个方面。以下是一些典型的 Sklearn 应用案例,涵盖了不同任务类型和数据集。
1. 分类案例:鸢尾花分类
鸢尾花数据集(Iris dataset)是机器学习中最经典的入门数据集之一,包含了三种鸢尾花(Setosa、Versicolor、Virginica)的4个特征(花萼长度、花萼宽度、花瓣长度和花瓣宽度)。
实现步骤:
-
数据加载与探索:
from sklearn.datasets import load_iris import pandas as pd # 加载数据 iris = load_iris() df = pd.DataFrame(iris.data, columns=iris.feature_names) df['target'] = iris.target df['species'] = df['target'].apply(lambda x: iris.target_names[x]) print(df.head()) -
数据可视化:
使用seaborn和matplotlib绘制特征关系图。import seaborn as sns import matplotlib.pyplot as plt sns.pairplot(df, hue='species') plt.show() -
数据预处理:
特征标准化。from sklearn.preprocessing import StandardScaler X = df.drop(columns=['target', 'species']) y = df['target'] scaler = StandardScaler() X_scaled = scaler.fit_transform(X) -
划分训练集和测试集:
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42) -
模型训练与评估:
- 决策树:
from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import accuracy_score model_dt = DecisionTreeClassifier(random_state=42) model_dt.fit(X_train, y_train) y_pred_dt = model_dt.predict(X_test) accuracy_dt = accuracy_score(y_test, y_pred_dt) print(f"Decision Tree Accuracy: {accuracy_dt:.4f}") - 支持向量机(SVM):
from sklearn.svm import SVC model_svm = SVC(kernel='linear', random_state=42) model_svm.fit(X_train, y_train) y_pred_svm = model_svm.predict(X_test) accuracy_svm = accuracy_score(y_test, y_pred_svm) print(f"SVM Accuracy: {accuracy_svm:.4f}") - K近邻(KNN):
from sklearn.neighbors import KNeighborsClassifier knn = KNeighborsClassifier(n_neighbors=1) knn.fit(X_train, y_train) y_pred = knn.predict(X_test) print("Test set accuracy: {:.2f}".format(knn.score(X_test, y_test)))
- 决策树:
-
模型优化:
使用网格搜索进行超参数调优。from sklearn.model_selection import GridSearchCV param_grid = {'max_depth': [3, 5, 10, None], 'min_samples_split': [2, 5, 10], 'min_samples_leaf': [1, 2, 4]} grid_search = GridSearchCV(estimator=DecisionTreeClassifier(random_state=42), param_grid=param_grid, cv=5) grid_search.fit(X_train, y_train) best_model = grid_search.best_estimator_
2. 回归案例:房价预测
以波士顿房价数据集或北京链家租房数据集为例,预测房屋租金或房价。
实现步骤(以北京房价为例):
-
数据加载与预处理:
import pandas as pd from sklearn.preprocessing import LabelEncoder, StandardScaler # 读取数据 data = pd.read_csv('newbj_lianJia.csv') # 处理非数值特征(如户型、朝向、城区等),常用LabelEncoder或OneHotEncoder le = LabelEncoder() data['district_encoded'] = le.fit_transform(data['district']) # ... 类似处理其他分类特征 # 特征选择(如选择与租金相关性高的特征) X = data[['area']] # 以面积为例 y = data['rent'] -
数据划分与标准化:
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) -
模型训练与预测:
from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, r2_score model = LinearRegression() model.fit(X_train_scaled, y_train) y_pred = model.predict(X_test_scaled) print("Coefficients: ", model.coef_) print("Mean squared error: %.2f" % mean_squared_error(y_test, y_pred)) print("Coefficient of determination (R^2): %.2f" % r2_score(y_test, y_pred))
3. 降维案例:PCA与NMF的应用
降维用于减少特征数量,剔除噪音,加速训练或可视化。
PCA用于鸢尾花数据降维与可视化:
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled) # X_scaled 是标准化后的特征
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis')
plt.xlabel('First Principal Component')
plt.ylabel('Second Principal Component')
plt.show()
PCA用于噪声过滤:
# 假设 X 是带噪声的数据
pca = PCA(n_components=0.95) # 保留95%的方差
X_reduced = pca.fit_transform(X)
X_filtered = pca.inverse_transform(X_reduced) # 重构数据,噪声被过滤
NMF用于高光谱遥感数据分解:
from sklearn.decomposition import NMF
from sklearn.preprocessing import MinMaxScaler
# 数据需为非负
scaler = MinMaxScaler()
X_scaled_nonneg = scaler.fit_transform(X)
nmf = NMF(n_components=2, init='nndsvda', random_state=42)
W = nmf.fit_transform(X_scaled_nonneg)
H = nmf.components_
# W 和 H 可以用于解释数据的潜在结构
4. 模型评估与调优案例
使用交叉验证和网格搜索优化模型参数。
以SVM为例的网格搜索:
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV
param_grid = {'C': [0.1, 1, 10, 100], 'gamma': [1, 0.1, 0.01, 0.001], 'kernel': ['rbf', 'linear']}
grid = GridSearchCV(SVC(), param_grid, refit=True, verbose=2, cv=5)
grid.fit(X_train, y_train)
print(grid.best_params_)
best_model = grid.best_estimator_
总结
Scikit-learn 提供了简洁一致的 API,使得实现机器学习流程(数据预处理、模型训练、评估、调优)变得非常高效。上述案例展示了 Sklearn 在分类、回归、降维等常见任务中的应用。对于更复杂的问题,可以尝试集成方法(如随机森林、梯度提升)或深度学习框架,但 Sklearn 依然是快速原型开发和理解机器学习概念的宝贵工具。
实践中,建议始终进行数据探索和可视化,理解数据特性后再选择模型,并利用交叉验证和网格搜索来优化性能,避免过拟合。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
更多推荐


所有评论(0)