首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据高中科目推荐大学学位

根据高中科目推荐大学学位
EN

Data Science用户
提问于 2018-04-20 07:58:11
回答 2查看 81关注 0票数 1

我有一份我们大学生高中课程的清单。

我想根据当前高中学生的课程向他们推荐大学学位--也就是说,基于向量预测一个班级。例如,学习代数、微积分和统计学的人可以被推荐为软件工程、会计或数学。

似乎有几种方法我可以采取:市场篮子分析,协作过滤,聚类,甚至神经网络。

我可以在稀疏的课程矩阵中构造我的数据,每一行都有一个代表学生最终学位的类,例如:

代码语言:javascript
复制
DEGREE       English    Calc    Algebra    Geography    History ... etc
Soft.Eng.    0          1       1          0            0
Comms        1          0       0          1            1
Mech.Eng.    1          1       1          0            0

我该怎么处理这个?

EN

回答 2

Data Science用户

发布于 2018-04-22 06:23:56

这个问题非常适合于神经网络。您的模型将有40个输入节点(这很好),然后您将有一些任意的隐藏层,您需要调优这个,和20个输出。在训练过程之后,你甚至可以得到其中每一个的概率。这可以用来对潜在学生的建议排序!

如何做这个

将数据加载到内存

根据存储数据的方式,此步骤将有所不同。但是,目标是从原始文件源转到Python数组或Pandas DataFrame。我假设您的数据结构如下

并保存为.csv文件。

让我们将数据加载到X和Y矩阵中。我们将把“学位”的标签编码为值。确保这些都拼得很好,否则会为掉皮的标签创建一个新的标签。

代码语言:javascript
复制
import pandas as pd
import numpy as np

df = pd.read_csv('test1.csv')
df['Degree'] = df['Degree'].astype('category')
df["Degree_encoding"] = df["Degree"].cat.codes

X = np.asarray(df.loc[:, df.columns != 'Degree'])
Y = df['Degree_encoding']

print(X.shape)
print(Y.shape)

(39,7) (39,)

将神经网络应用于此数据集

首先,我们将数据随机分成一个训练和测试集。这是用来评估我们的模型,同时保持我们没有过分适合。然后,我们确定输出类的数量。然后,我们重新构造输入矩阵,使它们在最后一个维度中有一个通道,这就是数据在模型中的流动方式。然后,我们将我们的输出归类为一个热编码向量。

代码语言:javascript
复制
from sklearn.model_selection import train_test_split
import keras

# Split the data
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.33, shuffle= True)

# The known number of output classes.
num_classes = len(set(df["Degree_encoding"]))
# Input dimensions
shape = X.shape[1::]

# We need to add a channels dimension to our data
# Channels go last for TensorFlow backend in Keras
x_train_reshaped = x_train.reshape((x_train.shape[0],) + shape)
x_test_reshaped = x_test.reshape((x_test.shape[0],) + shape)
input_shape = shape
print(input_shape)

# Convert class vectors to binary class matrices. This uses 1 hot encoding.
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

然后我们设计我们的模型

代码语言:javascript
复制
model = Sequential()
model.add(Dense(32,
                 activation='relu',
                 input_shape=input_shape))
model.add(Dense(128, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))

model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adadelta(),
              metrics=['accuracy'])

您可以使用model.summary()来获得这些层的描述。那我们就准备好训练我们的模特了!

代码语言:javascript
复制
epochs = 100
batch_size = 128
model.fit(x_train_reshaped, y_train,
          batch_size=batch_size,
          epochs=epochs,
          verbose=1,
          validation_data=(x_test_reshaped, y_test))
票数 -1
EN

Data Science用户

发布于 2018-04-25 21:56:04

在这些数据上,朴素贝叶斯(也许是非朴素贝叶斯变体)应该表现得非常好。因为你所有的输入都是二进制的。

培训、评估和解释也非常便宜。

您可以将它与频繁项集结合起来,以使其不那么天真,但如果这并不能提高准确性,我也不会感到惊讶。您可以使用FIM找到值得建模的依赖项,并为不重叠的频繁子集(例如工程主题与语言)构建最佳Bayes。然后假设独立的情况下组合这些分区。

票数 -2
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/30560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档