关键词
Julia | 变量 | 数据 | 多重 | 集合 | 矢量 | HTTP | JSON | 绘图 | CSV文件 | 压缩 | 可视化 | 模型 | 建模 | R | 蒙特卡罗 | 模拟 | 经济 | 数学 | 资产 | 现金流 | 投资 | 支出 | 马尔可夫链 | 雇佣 | 失业 | 矩阵 | 概率 | 帕累托 | 财富 | 洛伦兹曲线 | 基尼系数 | 资产回报 | 失业补偿金 | 薪资 | 折扣 | 工资流水 | 策略 | 方程 | 贝尔曼方程 | 贪婪策略 | 欧拉方程 | 价值迭代 | 时间迭代 | 内生网格法 | 数值 | 算法
🎯要点
🎯数据元素:
🖊变量处理 | 🖊代码多重调用 | 🖊集合:数组、字典、元组和命名元组 | 🖊矢量化代码:广播 | 🖊字符串处理 | 🖊提取HTTP查询,解析JSON数据,丢失值绘图和插值 | 🖊处理压缩文件,CSV文件,Apache Arrow数据,SQLite数据库,计算和可视化汇总统计数据 | 🖊数据帧处理,创建本地线性回归模型,可视化模型预测 | 🖊交互R语言,绘制矩阵相关性 | 🖊转换数据帧为其他类型 | 🖊提取压缩归档文件,分割整合变换数据帧,图形分析数据 | 🖊构建资产预测模型 | 🖊蒙特卡罗模拟期权定价。
🎯经济学几何级数学模型:
🖊资产负债表现金流价值估算,对比投资和政府支出对收益的影响 | 🖊马尔可夫链计算个人雇佣和失业的矩阵数据,确定信息:失业持续时间,何时失业,可能失业的概率 | 🖊帕累托分布模型计算财富分布不平等:洛伦兹曲线和基尼系数测量,工资收入和资产回报影响 | 🖊人才市场建模,推断求职者市场价值最大化策略 | 🖊个人跳槽预期建模,判断在职和离职状态下,对新工作机会的跳槽或选择预期 | 🖊失业人员重新就职建模,评估条件:薪资下降、失业补偿金、薪资构成分布 | 🖊职业选择建模,最大化预期工资流 | 🖊在职人员择业建模,评估投资目前职业与选择新职业资本回报 | 🖊制造业增长型贴现投资建模,价值迭代和时间迭代评估价值最大化策略 。
🍇Julia建立预测模型
我们将构建一个预测机器学习模型。
julia> Pkg.add(“ScikitLearn.jl”)
这个包是 Python scikit-learn 包的接口。使用这个包的有趣之处在于,您可以使用与 Python 中使用的相同的模型和功能。Sklearn 要求所有数据都是数字类型,所以让我们对数据进行标签编码,
using ScikitLearn
@sk_import preprocessing: LabelEncoder
labelencoder = LabelEncoder()
categories = [2 3 4 5 6 12 13]
for col in categories
train[col] = fit_transform!(labelencoder, train[col])
end
以前用过sklearn的人会发现这段代码很熟悉,我们使用LabelEncoder对类别进行编码。我使用了带有分类数据的列索引。
接下来,我们将导入所需的模块。 然后我们将定义一个通用分类函数,它以模型作为输入并确定准确性和交叉验证分数。
using ScikitLearn: fit!, predict, @sk_import, fit_transform!
@sk_import preprocessing: LabelEncoder
@sk_import model_selection: cross_val_score
@sk_import metrics: accuracy_score
@sk_import linear_model: LogisticRegression
@sk_import ensemble: RandomForestClassifier
@sk_import tree: DecisionTreeClassifier
function classification_model(model, predictors)
y = convert(Array, train[:13])
X = convert(Array, train[predictors])
X2 = convert(Array, test[predictors])
fit!(model, X, y)
predictions = predict(model, X)
accuracy = accuracy_score(predictions, y)
println("\naccuracy: ",accuracy)
cross_score = cross_val_score(model, X, y, cv=5)
println("cross_validation_score: ", mean(cross_score))
fit!(model, X, y)
pred = predict(model, X2)
return pred
end
让我们制作第一个逻辑回归模型。 一种方法是将所有变量纳入模型,但这可能会导致过度拟合。 简而言之,采用所有变量可能会导致模型理解特定于数据的复杂关系,并且不能很好地概括。
因此,让我们用“Credit_History”制作第一个模型。
model = LogisticRegression()
predictor_var = [:Credit_History]
classification_model(model, predictor_var)
准确度:80.945% 交叉验证分数:80.957%。
决策树是建立预测模型的另一种方法。众所周知,它比逻辑回归模型提供更高的准确性。
model = DecisionTreeClassifier()
predictor_var = [:Credit_History, :Gender, :Married, :Education]
classification_model(model, predictor_var)
准确度:80.945% 交叉验证分数:76.656%
在这里,基于分类变量的模型无法产生影响,因为信用记录对它们起着主导作用。让我们尝试一些数值变量:
#We can try different combinations of variables:
predictor_var = [:Credit_History, :Loan_Amount_Term]
classification_model(model, predictor_var)
准确度:99.345% 交叉验证分数:72.009%。
随机森林是解决分类问题的另一种算法。随机森林的一个优点是我们可以使其适用于所有特征,并且它返回一个可用于选择特征的特征重要性矩阵。
model = RandomForestClassifier(n_estimators=100)
predictors =[:Gender, :Married, :Dependents, :Education,
:Self_Employed, :Loan_Amount_Term, :Credit_History, :Property_Area,
:LoanAmount]
classification_model(model, predictors)
准确度:100.000% 交叉验证分数:78.179%。
在这里我们看到训练集的准确率是 100%。这是过度拟合的最终情况,可以通过两种方式解决:
更新后的代码现在是
model = RandomForestClassifier(n_estimators=100, min_samples_split=25, max_depth=8, n_jobs=-1)
predictors = [:ApplicantIncome, :CoapplicantIncome, :LoanAmount, :Credit_History, :Loan_Amoun_Term, :Gender, :Dependents]
classification_model(model, predictors)
准确度:82.410% 交叉验证分数:80.635%。