Literary author classification from book content
There might be 2 problems here:

You have not tuned the parameters for TFIDF and hence it is giving low scores. Try to do a grid search and parameters such as min_df, max_df, max_features etc. This might increase the scores. CountVectorizer might be preforming good because the classifier might be associating some unique words with a certain author. 
The data imbalance problem. You can try to use SMOTE on the TFIDF features, or if you are using Logistic Regression you can set class_weights='balanced' and that might also increase scores.
I'm trying to build a model that's able to classify the author of a book (just fiction books for the moment) by looking at its text. At first, I just worked with authors that had at least 30 books. In my dataset, that was ~2000 books written by ~30 authors in total, and that went pretty great, so I decided to raise the stakes. By lowering the threshold to 10 books, the database grew to ~400 authors and ~9000 books.
The way I classified the books is as follows: I removed punctuation, newlines, extra spaces, and stopwords from every text, then I extracted the features with sklearn CountVectorizer and TfidfVectorizer. With this approach, the F1 score was 0.95 for the 2000 books db and 0.62 for the 9000 books db. In both cases I used the SGD model from scikit learn.
The training with the larger dataset was much slower, so I decided to get 5000 random words from each book and use only those. This decreased the training time from 20 minutes to only 2 minutes, and enabled me to try something different. There wasn't a big difference in the various metrics, so I decided to try and remove the tfidf features. Using only CountVectorizer I got a 0.87 F1 score.
I'm not sure why this is happening, my expectation was that the tfidf would make things easier and therefore better my score. In theory, tfidf should help with the sparsity of the matrix. Do you have any clue on why removing it improved the score instead?
Are there other strategies, maybe better suited to work with long texts? Should I consider trimming the dataset in a certain way?