前置要求
pip install scikit-learn pandas numpy matplotlib
1. 房价预测(回归)
目标:使用线性回归预测房价
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
import pandas as pd
# 读取数据
df = pd.read_csv('house_prices.csv')
# 特征与标签
X = df[['area', 'rooms', 'floor']]
y = df['price']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)
# 预测与评估
predictions = model.predict(X_test)
mse = mean_squared_error(y_test, predictions)
print(f"均方误差: {mse:.2f}")
print(f"模型系数: {model.coef_}")
# 预测新房
new_house = [[120, 3, 8]] # 120平, 3室, 8楼
predicted = model.predict(new_house)
print(f"预测价格: {predicted[0]:.2f} 万元")
知识点:train_test_split、线性回归、模型评估
2. 鸢尾花分类(分类)
目标:使用 KNN 算法对鸢尾花进行分类
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, classification_report
# 加载数据
iris = load_iris()
X, y = iris.data, iris.target
# 划分数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练 KNN 模型
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
# 预测
predictions = knn.predict(X_test)
# 评估
accuracy = accuracy_score(y_test, predictions)
print(f"准确率: {accuracy:.2%}")
print(classification_report(y_test, predictions, target_names=iris.target_names))
# 预测新样本
new_sample = [[5.1, 3.5, 1.4, 0.2]]
result = knn.predict(new_sample)
print(f"预测类别: {iris.target_names[result[0]]}")
知识点:KNeighborsClassifier、分类报告、准确率评估
3. 客户聚类(聚类)
目标:使用 K-Means 对客户进行分群
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
import pandas as pd
import matplotlib.pyplot as plt
# 读取客户数据
df = pd.read_csv('customers.csv')
X = df[['age', 'income', 'spending_score']]
# 特征标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# K-Means 聚类
kmeans = KMeans(n_clusters=3, random_state=42, n_init=10)
df['cluster'] = kmeans.fit_predict(X_scaled)
# 查看各群特征
print(df.groupby('cluster')[['age', 'income', 'spending_score']].mean())
# 可视化(收入 vs 消费评分)
plt.scatter(df['income'], df['spending_score'], c=df['cluster'], cmap='viridis')
plt.xlabel('收入')
plt.ylabel('消费评分')
plt.title('客户聚类结果')
plt.colorbar(label='群集')
plt.savefig('clusters.png')
plt.show()
知识点:KMeans 聚类、StandardScaler 标准化、数据可视化
4. 手写数字识别
目标:使用 MNIST 数据集和 MLP 分类器
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score
# 加载数据(8x8 手写数字)
digits = load_digits()
X, y = digits.data, 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=(64, 32), max_iter=500, random_state=42)
mlp.fit(X_train, y_train)
predictions = mlp.predict(X_test)
accuracy = accuracy_score(y_test, predictions)
print(f"手写数字识别准确率: {accuracy:.2%}")
知识点:load_digits 数据集、MLPClassifier、神经网络
5. 泰坦尼克号生存预测
目标:完整的机器学习流程
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, classification_report
from sklearn.preprocessing import LabelEncoder
# 加载数据(使用 sklearn 内置或 CSV)
url = 'https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv'
df = pd.read_csv(url)
# 特征工程
features = ['Pclass', 'Sex', 'Age', 'Fare', 'SibSp', 'Parch']
df = df[features + ['Survived']].dropna()
le = LabelEncoder()
df['Sex'] = le.fit_transform(df['Sex'])
X = df[features]
y = df['Survived']
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, random_state=42)
rf.fit(X_train, y_train)
preds = rf.predict(X_test)
print(f"准确率: {accuracy_score(y_test, preds):.2%}")
print("特征重要性:", dict(zip(features, rf.feature_importances_)))
知识点:RandomForestClassifier、特征工程、LabelEncoder、特征重要性
6. 情感分析
目标:使用朴素贝叶斯进行文本分类
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
# 训练数据
texts = [
"这部电影太好了,非常喜欢", "质量不错,推荐购买",
"服务态度很差,再也不来了", "太差了,完全不能用",
"外观好看,功能强大", "包装破损,物流太慢",
"性价比很高,满意", "虚假宣传,很失望"
]
labels = [1, 1, 0, 0, 1, 0, 1, 0] # 1=正面 0=负面
# 文本向量化
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(texts)
y = labels
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)
# 朴素贝叶斯
nb = MultinomialNB()
nb.fit(X_train, y_train)
preds = nb.predict(X_test)
print(f"准确率: {accuracy_score(y_test, preds):.2%}")
# 测试新文本
new_text = vectorizer.transform(["这个产品真的很棒"])
print(f"情感预测: {'正面' if nb.predict(new_text)[0] == 1 else '负面'}")
知识点:CountVectorizer 文本向量化、朴素贝叶斯、文本分类