()
| 169 | return Xtrain, Ytrain, Xtest, Ytest, word2idx |
| 170 | |
| 171 | def main(): |
| 172 | Xtrain, Ytrain, Xtest, Ytest, word2idx = get_data() |
| 173 | |
| 174 | # convert to numpy arrays |
| 175 | Xtrain = np.array(Xtrain) |
| 176 | Ytrain = np.array(Ytrain) |
| 177 | |
| 178 | # convert Xtrain to indicator matrix |
| 179 | N = len(Xtrain) |
| 180 | V = len(word2idx) + 1 |
| 181 | print("vocabulary size:", V) |
| 182 | # Xtrain_indicator = np.zeros((N, V)) |
| 183 | # Xtrain_indicator[np.arange(N), Xtrain] = 1 |
| 184 | |
| 185 | # decision tree |
| 186 | dt = DecisionTreeClassifier() |
| 187 | |
| 188 | # without indicator |
| 189 | dt.fit(Xtrain.reshape(N, 1), Ytrain) |
| 190 | print("dt train score:", dt.score(Xtrain.reshape(N, 1), Ytrain)) |
| 191 | p = dt.predict(Xtrain.reshape(N, 1)) |
| 192 | print("dt train f1:", f1_score(Ytrain, p, average=None).mean()) |
| 193 | |
| 194 | # with indicator -- too slow!! |
| 195 | # dt.fit(Xtrain_indicator, Ytrain) |
| 196 | # print("dt score:", dt.score(Xtrain_indicator, Ytrain)) |
| 197 | |
| 198 | # train and score |
| 199 | model = LogisticRegression() |
| 200 | model.fit(Xtrain, Ytrain, V=V) |
| 201 | print("training complete") |
| 202 | print("lr train score:", model.score(Xtrain, Ytrain)) |
| 203 | print("lr train f1:", model.f1_score(Xtrain, Ytrain)) |
| 204 | |
| 205 | |
| 206 | Ntest = len(Xtest) |
| 207 | Xtest = np.array(Xtest) |
| 208 | Ytest = np.array(Ytest) |
| 209 | # convert Xtest to indicator |
| 210 | # Xtest_indicator = np.zeros((Ntest, V)) |
| 211 | # Xtest_indicator[np.arange(Ntest), Xtest] = 1 |
| 212 | |
| 213 | # decision tree test score |
| 214 | print("dt test score:", dt.score(Xtest.reshape(Ntest, 1), Ytest)) |
| 215 | p = dt.predict(Xtest.reshape(Ntest, 1)) |
| 216 | print("dt test f1:", f1_score(Ytest, p, average=None).mean()) |
| 217 | # print("dt test score:", dt.score(Xtest_indicator, Ytest)) # too slow! |
| 218 | |
| 219 | # logistic test score -- too slow!! |
| 220 | print("lr test score:", model.score(Xtest, Ytest)) |
| 221 | print("lr test f1:", model.f1_score(Xtest, Ytest)) |
| 222 | |
| 223 | if __name__ == '__main__': |
| 224 | main() |
no test coverage detected