分类
分类任务的目标是根据输入数据预测一个离散的类别标签。例如,通过电子邮件的内容来判断它是垃圾邮件还是非垃圾邮件。常见的分类算法有支持向量机(SVM)、K近邻(KNN)、决策树、随机森林和神经网络等。
示例:使用Scikit-learn库实现简单的文本分类(垃圾邮件检测)
需要准备一些数据。这里假设已经包含邮件内容及其是否为垃圾邮件标签的数据集。
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, classification_report
# 假设数据已经加载到变量emails中,其中每个条目都是一个字典,含有"text"和"label"两个键
emails = [
{"text": "Free Viagra now!!!", "label": "spam"},
{"text": "Hello, how are you?", "label": "ham"},
# 更多数据...
]
# 准备数据
texts = [email["text"] for email in emails]
labels = [email["label"] for email in emails]
# 将文本转换为数值特征
vectorizer = CountVectorizer()
features = vectorizer.fit_transform(texts)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.2, random_state=42)
# 创建并训练模型
classifier = MultinomialNB()
classifier.fit(X_train, y_train)
# 预测
predictions = classifier.predict(X_test)
# 评估模型
print("Accuracy:", accuracy_score(y_test, predictions))
print(classification_report(y_test, predictions))
# 使用模型进行新数据的预测
new_emails = ["Win a million dollars now!", "Dinner at 7?"]
new_features = vectorizer.transform(new_emails)
predicted_labels = classifier.predict(new_features)
print(predicted_labels)
回归
回归任务旨在预测连续值输出。比如预测房价。常用的方法包括线性回归、岭回归、Lasso回归和支持向量回归(SVR)等。
示例:基于房屋特征预测房价
这里我同样使用Scikit-learn来演示如何构建一个简单的回归模型以预测房价。假设有如下结构的数据集:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
# 加载数据
data = pd.read_csv('house_prices.csv') # 假设CSV文件包含房子的各种特征以及价格
features = data.drop('price', axis=1)
prices = data['price']
# 数据预处理
# 这里可以添加更多复杂的预处理步骤,如填充缺失值、标准化等
# features = ... # 处理特征
# prices = ... # 处理目标变量
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(features, prices, test_size=0.2, random_state=42)
# 创建并训练模型
model = LinearRegression()
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 评估模型性能
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"Mean Squared Error: {mse}")
print(f"R^2 Score: {r2}")
# 可视化结果(可选)
import matplotlib.pyplot as plt
plt.scatter(y_test, y_pred)
plt.xlabel("Actual Prices")
plt.ylabel("Predicted Prices")
plt.title("Actual Prices vs Predicted Prices")
plt.show()