In that case, Classify interprets the input as text and uses words as features. Since there is only one word per examples, it won't be able to generalise.
What you can do is extract features out of the names. For example you can construct a function that extract the the last letter and the last two letters:
features[name_] := {StringTake[name, -1], StringTake[name, -2]}
Then construct a training set:
femaleNames =
features /@ {"Amanda", "Anna", "Emma", "Erika", "Elin", "Hanna",
"Karin", "Marie", "Sara", "Viola"};
maleNames =
features /@ {"Anders", "Bo", "Erik", "Göran", "Jakob", "Martin",
"Knut", "Sune", "Tim", "Örjan"};
trainingData =
Join[Thread[femaleNames -> "Female"], Thread[maleNames -> "Male"]]
{{"a", "da"} -> "Female", {"a", "na"} -> "Female", {"a", "ma"} ->
"Female", {"a", "ka"} -> "Female", {"n", "in"} ->
"Female", {"a", "na"} -> "Female", {"n", "in"} ->
"Female", {"e", "ie"} -> "Female", {"a", "ra"} ->
"Female", {"a", "la"} -> "Female", {"s", "rs"} ->
"Male", {"o", "Bo"} -> "Male", {"k", "ik"} -> "Male", {"n", "an"} ->
"Male", {"b", "ob"} -> "Male", {"n", "in"} ->
"Male", {"t", "ut"} -> "Male", {"e", "ne"} -> "Male", {"m", "im"} ->
"Male", {"n", "an"} -> "Male"}
You can then train the classifier and test it:
In[87]:= c = Classify[trainingData];
test = {"Daniel", "Karina", "Sofie", "Josefina", "Sissela", "Sven",
"Erik"};
Thread[test -> c[features /@ test]]
Out[89]= {"Daniel" -> "Male", "Karina" -> "Female",
"Sofie" -> "Female", "Josefina" -> "Female", "Sissela" -> "Female",
"Sven" -> "Male", "Erik" -> "Male"}
It got all the Swedish names I know right, but to make it better, you probably need more data and better features.