性别分类器设计

性别分类器

        无论中文还是英文,男女名字上都有很重要的特征,比如:中文:军,兵这样的名字,男性占绝大多数;霞、燕这样的名字,女性占绝大多数;当然英文中:Jack、John为男性较多,amy、Cassie等等,女性占绝大多数,并且结尾是一个很重要特征,而性别与消费行为、消费心理很多方面都息息相关,而当数据量大时,人工无法完成分类,这时机器学习大显身手!

        下面,我们来看看如何来进行性别分类器的设计:

        这里,我们用nltk.corpus下name包作为姓名分类标记,当然,首先要下载数据。

然后,将库中性别和姓名对应值(tuple)进行提取,然后,通过姓名尾部1-5个字符,生成训练集(因为数据集完全名字不一定都存在,否则,就不是机器学习了,直接变为查找了,是不是?)。最后,利用分类器进行训练,用户输入数据就可以直接预测了,当然,还得先评估分类器的效果,然后,就可以推出使用了。

        (1)      提取性别标记名称,直接调用。

      from nltk.corpusimport names

  labeled_names =([(name, 'male') for name in names.words('male.txt')] +[(name, 'female') forname in names.words('female.txt')])

    为了测试方便,打乱数据:

    random.seed(7)

    random.shuffle(labeled_names)

    (2) 定义一个函数可以提取Word的尾部字符特征,默认为2。

    def gender_features(word, num_letters=2):

    return {'feature': word[-num_letters:].lower()}

   (3) 由于不能使用整个姓名,所以采用1-5字符添加特征值,这样,带有性别特征的数据集范围将扩大。

    for i in range(1, 5):

    print ('\nNumber of letters:', i)

    featuresets = [(gender_features(n, i), gender) for (n, gender) in labeled_names]

    (4)我们选择最大熵分类器:classifier = nltk.MaxentClassifier.train(featuresets)。

    为了测试,所以一般不直接用全样本featuresets进行训练,大家可以选70%,方法如下:

    number=len(featuresets)

    train_number=int(number*0.3)

    train_set, test_set = featuresets[train_number:],featuresets[:train_number]

    classifier = nltk.MaxentClassifier.train(featuresets)改为:nltk.MaxentClassifier.train(featuresets)

   (5)对算法和模型进行评估(精确值accuracy,nltk已经提供我们选择分类器之后的评估):

            nltk_accuracy(classifier,test_set)

   (6)输入测试数据:input_names= ['John', 'Amy', 'Betty']

   大家也可以选择朴素贝叶斯分类器观察效果。大家,加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值