面试华为,心理压力大。。。


哈喽,我是kk~
一是实习没拿到offer,二是华为面试压力大,考察全面。
今天看到一位同学反馈:华为,心里总是有点忐忑。一是实习没拿到offer,二是华为面试压力大,考察全面。直到上offer,周面试结束,才感觉轻松下来。
回想起来,面试其实没那么可帕。有些担忧反而能让你全神贯注,全力以赴。这就是追求梦想的感觉,即使过程艰难,也能乐在其中。

很多时候,紧张、忐忑、担心,都是自己给到自己压力。试想,如果自己是面试官,其实就是轻轻松松想和面试者交流,获取面试者对于知识的掌握而已。
放松心情,把自己知道的,说出来即可,没必要给自己心里太大的负担。
今天顺带分享一个核心机器学习算法模型:LightGBM~
LightGBM
LightGBM(Light Gradient Boosting Machine)是微软开发的一个高效的梯度提升框架,专门针对速度和效率进行了优化。
它基于决策树算法,可以在保持高准确率的同时,大幅度提高训练速度和减少内存消耗。
核心原理
LightGBM 采用基于决策树的集成学习方法——梯度提升决策树(GBDT)。GBDT 是一种迭代的树模型,通过在每一步加入新的树来纠正之前所有树的误差,从而提高模型的预测能力。
LightGBM 的主要特点是:
1. 直方图算法:将连续的特征值离散化到固定数量的桶中,大幅度减少计算量。
2. 基于叶子生长的策略:每次根据叶子的最大分裂增益来生长树,而不是基于深度生长。
3. 互斥特征捆绑(EFB):将稀疏特征组合以减少特征维度。
4. 基于GPU的加速:利用GPU计算加速模型训练过程。
数学原理
LightGBM 模型的构建过程涉及以下几个关键步骤:
1. 目标函数:
其中,
 是损失函数,
 是正则化项,用于防止过拟合。
2. 叶子分裂增益:
其中,
 和 
 分别是左子叶和右子叶的梯度之和,
 和 
 分别是左子叶和右子叶的二阶导之和,
 是正则化参数,
 是叶子数的正则化参数。
3. 直方图算法:
将连续特征值离散化为直方图,通过预先计算和缓存每个桶的统计量,大幅减少分裂候选点的计算时间。
LightGBM 的优势
1. 速度快:由于直方图算法和基于叶子生长的策略,LightGBM 的训练速度比传统 GBDT 快很多。
2. 低内存消耗:通过直方图和 EFB 技术,有效减少了内存使用。
3. 高准确性:基于梯度提升算法,具有很高的预测准确性。
4. 分布式支持:支持分布式训练,可以处理大规模数据集。
实际案例:预测房价
在这个实际案例中,我们使用LightGBM来预测房价。
具体步骤包括数据读取和预处理、模型训练、模型评估和可视化。
数据读取和预处理
首先,我们从一个CSV文件中读取波士顿房价数据。假设文件名为boston_housing.csv。
1. CRIM: 城镇人均犯罪率
2. ZN: 占地面积超过25,000平方英尺的住宅用地比例
3. INDUS: 每个城镇非零售业务英亩比例
4. CHAS: 查尔斯河虚拟变量(如果边界是河流,则为1;否则为0)
5. NOX: 一氧化氮浓度(每十亿分之几)
6. RM: 每个住宅的平均房间数
7. AGE: 1940年之前建成的自住单位比例
8. DIS: 与五个波士顿就业中心的加权距离
9. RAD: 公路可达性指数
10. TAX: 每一万美元的全值财产税率
11. PTRATIO: 每个城镇的学生与教师比例
12. B: 计算公式为 
,其中 
 指的是城镇中黑人的比例
13. LSTAT: 人口中地位较低者的比例
14. TARGET: 自住房的房价中位数(千美元)
这些变量分别描述了波士顿各个区域的经济、环境、社会等多方面的特征,并用于预测自住房的房价中位数(TARGET)。这些特征在不同程度上影响着房价,是进行房价预测时的重要参考数据。
如果需要获取数据集,后台回复“数据集”即可!
【】
通过了解每个特征的含义,我们可以更好地理解数据,并有针对性地进行特征工程和模型训练。
下面的代码展示了如何读取这个CSV文件并进行预处理。
import pandas as pdimport numpy as npfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import StandardScalerfrom sklearn.metrics import mean_squared_errorimport lightgbm as lgbimport matplotlib.pyplot as pltimport seaborn as sns# 读取 CSV 文件file_path = 'boston_housing.csv'data = pd.read_csv(file_path, delimiter=',')# 检查缺失值print(data.isnull().sum())# 分割数据集X = data.drop('TARGET', axis=1)y = data['TARGET']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)
在这段代码中,我们首先导入必要的库,然后使用pd.read_csv从CSV文件中读取数据,并使用delimiter=','指定文件是以制表符分隔的。接着,检查数据中是否存在缺失值。最后,我们将数据分为训练集和测试集,并对特征进行标准化处理。
模型训练
接下来,我们使用LightGBM进行模型训练。我们将数据集转换为LightGBM的格式,并设置模型的参数。
# 构建 LightGBM 数据集train_data = lgb.Dataset(X_train_scaled, label=y_train)test_data = lgb.Dataset(X_test_scaled, label=y_test, reference=train_data)# 设置参数params = {    'objective': 'regression',    'metric': 'rmse',    'boosting_type': 'gbdt',    'learning_rate': 0.05,    'num_leaves': 31,    'max_depth': -1,    'feature_fraction': 0.9,    'bagging_fraction': 0.8,    'bagging_freq': 5,    'verbose': 0}# 模型训练num_round = 1000bst = lgb.train(params, train_data, num_round, valid_sets=[test_data], early_stopping_rounds=50)
在这段代码中,我们将训练集和测试集转换为LightGBM的数据格式,并设置了一些关键参数,如目标函数(objective)、评估指标(metric)、学习率(learning_rate)等。然后,使用lgb.train函数训练模型,并设置早停轮数为50(early_stopping_rounds=50),如果模型在50轮内没有改进,则提前停止训练。
模型评估
模型训练完成后,我们可以使用测试集对模型进行评估,并计算均方根误差(RMSE)。
# 模型预测y_pred = bst.predict(X_test_scaled, num_iteration=bst.best_iteration)mse = mean_squared_error(y_test, y_pred)rmse = np.sqrt(mse)print(f'RMSE: {rmse:.4f}')
在这段代码中,我们使用训练好的模型对测试集进行预测,计算预测值与真实值之间的均方误差(MSE),并取其平方根得到RMSE,以评估模型的性能。
可视化
最后,我们对预测结果和特征重要性进行可视化。
# 可视化预测结果plt.figure(figsize=(10, 6))plt.scatter(y_test, y_pred, alpha=0.6)plt.xlabel('Actual Prices')plt.ylabel('Predicted Prices')plt.title('Actual vs Predicted Prices')plt.show()

# 特征重要性importance = bst.feature_importance()feature_names = X.columnsimportance_df = pd.DataFrame({'Feature': feature_names, 'Importance': importance})importance_df = importance_df.sort_values(by='Importance', ascending=False)plt.figure(figsize=(12, 8))sns.barplot(x='Importance', y='Feature', data=importance_df)plt.title('Feature Importance')plt.show()

在这段代码中,首先使用散点图比较实际价格和预测价格,以直观地展示模型的预测效果。然后,绘制特征重要性图,展示每个特征对模型的重要性。
通过以上步骤,我们完成了一个使用LightGBM预测房价的完整项目。这个项目展示了从数据读取、预处理、模型训练、评估到结果可视化的全过程,并通过散点图和特征重要性图对结果进行了解析和展示。
到顶部