利用机器学习深入分析NBA比赛数据:预测结果、球员表现与战术效果
import pandas as pd
# 创建一个带有缺失值的DataFrame
data = pd.DataFrame({
'A': [1, 2, None, 4],
'B': [5, None, None, 8],
'C': [9, 10, 11, 12]
})
# 查看数据集
print(data)
# 删除含有缺失值的记录
cleaned_data = data.dropna()
print(cleaned_data)
# 填充缺失值
data_filled = data.fillna(0)
print(data_filled)
异常值识别
# 异常值处理示例
# 使用IQR规则识别异常值
Q1 = data.quantile(0.25)
Q3 = data.quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
# 确定异常值
outliers = ((data < lower_bound) | (data > upper_bound))
print(outliers)
# 处理异常值
# 例如,将异常值替换为平均值
data_mean = data.mean()
data[~outliers] = data[~outliers].fillna(data_mean)
print(data)
数据集中常有异常数值,这些数值可能会影响分析结果。因此,我们首先要确定异常值检测的范围,然后通过比较这些范围与数据集,识别出异常值。比如,在销售数据中,销售额异常高或低的情况就可以被认为是异常值。
在实际的统计分析运用中,识别出异常数据极为关键。以工业生产为例,若某产品的质量标准超出了正常界限,这往往暗示着生产流程可能存在潜在问题,需要立刻进行排查。
过滤法特征选择
在特征筛选环节,过滤方法颇为普遍。先对数据集进行详尽的统计,再依据统计结果挑选恰当的特征。这就像在众多人中精挑细选,依据既定标准严格筛选合适人选。
此方法操作简单,速度也快。处理像基因数据这样的大规模特征数据时,过滤技术能有效减少特征数量,这样就能提高后续分析的效率,让数据处理更有针对性。
递归特征消除
RFE的包装技术核心是采用递归策略来建立模型。在每轮迭代中,我们都会选择最优秀或最差的特征,并将其移除。这一过程持续进行,直至达到所需的特征数量。这整个过程就如同层层筛选,逐渐聚焦于关键要素。
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
import numpy as np
# 假设 X 是球员的统计数据,y 是球员的得分
X = np.array(...) # 特征数据
y = np.array(...) # 得分数据
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 创建线性回归模型
regressor = LinearRegression()
regressor.fit(X_train, y_train) # 训练模型
# 预测和评估
y_pred = regressor.predict(X_test)
在诸如房价预测这样的预测场合,RFE技术帮助我们聚焦于核心要素,诸如所处位置和房屋大小。此技术能筛选掉那些对预测结果影响较小的因素,进而提升预测模型的准确性。
from sklearn.svm import SVR
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
# 假设 X 和 y 已经定义
scaler = StandardScaler() # 数据标准化
svr = SVR() # 创建SVR模型
pipe = make_pipeline(scaler, svr) # 管道处理标准化和模型训练
# 训练SVR模型
pipe.fit(X_train, y_train)
# 进行预测
y_pred = pipe.predict(X_test)
基于树的特征选择
决策树技术,比如随机森林和梯度提升树,它们通过计算各个特征的重要性分数,来筛选出那些最具影响力的特征。在图像识别这一领域,这种方法能帮助更精确地找出图像中的关键部分。
from sklearn.ensemble import RandomForestRegressor
# 创建随机森林回归模型实例
rfr = RandomForestRegressor(n_estimators=100, random_state=42)
# 训练模型
rfr.fit(X_train, y_train)
# 进行预测
y_pred = rfr.predict(X_test)
此方法优点多多,使用起来简单方便,不需要进行复杂的参数设置。而且,树模型在处理特征之间的复杂联系方面表现出色。在金融风险评估这一领域,它能够迅速区分出高风险和低风险的情况,面对众多复杂因素也游刃有余。
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
# 创建决策树分类模型实例
dtc = DecisionTreeClassifier()
# 创建随机森林分类模型实例
rfc = RandomForestClassifier(n_estimators=100)
# 创建梯度提升分类模型实例
gbc = GradientBoostingClassifier()
# 训练并预测
for clf in (dtc, rfc, gbc):
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
# 可以通过逻辑进一步评估模型性能,如计算准确率等
基于模型的特征评估
随机森林、梯度提升树等模型可以给出特征重要性的评价,据此我们可以筛选出重要的特征。在预测电商用户的购物行为时,我们可依据这些评价,重点关注用户过往的购物金额和购物频次等关键数据。
from sklearn.ensemble import GradientBoostingClassifier
# 创建梯度提升树分类模型实例
gbm = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1)
# 训练模型
gbm.fit(X_train, y_train)
# 进行预测
y_pred = gbm.predict(X_test)
在进行线性回归分析时,我们通过查看各个特征的系数的绝对值来衡量它们的重要性。以研究身高和体重关系的线性回归模型为例,系数的数值能够让我们判断出哪个因素在预测体重方面更具影响力,这对我们的分析具有重要意义。
模型评估与优化
from sklearn.model_selection import train_test_split
# 假设X为特征矩阵,y为目标向量
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)
# 上面的代码中,stratify参数确保训练集和测试集中的y分布相同。
模型验证与评估在机器学习环节至关重要。它保证了模型不仅在训练数据上表现优异,还能应对新数据的挑战。特别是在自动驾驶这一领域,严格的验证和评估对于确保车辆决策既准确又安全极为关键。
A/B测试和贝叶斯优化等技术对提升模型效果大有裨益。比如,在软件升级时,我们可以用A/B测试来比较新旧版本的表现,而贝叶斯优化则能帮助我们更准确地找到最佳的超参数组合,从而提高模型性能。
from sklearn.model_selection import cross_val_score
# 假设model为一个已经定义好的机器学习模型
scores = cross_val_score(model, X, y, cv=5)
# 输出每一次交叉验证的结果和平均结果
print(f"Cross-validation scores: {scores}")
print(f"Average cross-validation score: {scores.mean()}")
from sklearn.model_selection import GridSearchCV, RandomizedSearchCV
# 假设param_grid为一个超参数网格字典
param_grid = {'n_estimators': [10, 50, 100], 'max_features': ['auto', 'sqrt']}
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=5)
random_search = RandomizedSearchCV(estimator=model, param_distributions=param_grid, n_iter=10, cv=5)
# 执行搜索
grid_search.fit(X_train, y_train)
random_search.fit(X_train, y_train)
# 输出最佳参数设置
print(f"Best parameters: {grid_search.best_params_}")
print(f"Best parameters: {random_search.best_params_}")