简体   繁体   中英

Change the string output to int to obtain the maximum number?

I am quite new to python so still getting to grips with the language.

I have the following function which takes a string and apply it to an algorithm which tells us if it aligns to models 1, 2, 3, 4, or 5.

Currently this piece of code:

def apply_text(text):
    test_str = [text]
    test_new = tfidf_m.transform(test_str)
    prediction = 0
    for m in range(0,5):
        percentage = '{P:.1%}'.format(M=cat[m], P=lr_m[m].predict_proba(test_new)[0][1])
        print(percentage)

And running the following function: apply_text('Terrible idea.')

Gives the following output:

71.4%
33.1%
2.9%
1.6%
4.9%

With Model 1 = 71.4%, Model 2 = 33.1%, ... Model 5 = 4.9%.

I want to only output the Model number where there is the highest percentage. So in the above example, the answer would be 1 as this has 71.4%. As the output is a string type I am finding it difficult to find ways of converting this to an int and then comparing each value (probably in a loop of some sort) to obtain the maximum value

Try putting values in a list then you can utilize list methods:

percentage = []
for m in range(0, 5):
    percentage.append('{P:.1%}'.format(M=cat[m], P=lr_m[m].predict_proba(test_new)[0][1]))

print(*percentage, sep='\n')
print('Max on model', percentage.index(max(percentage)))

Or using a dictionary:

percentage = {}
for m in range(0, 5):
    percentage['Model ' + str(m)] = '{P:.1%}'.format(M=cat[m], P=lr_m[m].predict_proba(test_new)[0][1])

print(*percentage, sep='\n')
print('Max on', max(percentage.keys(), key=(lambda key: percentage[key])))

I think you want to save the percentages along with the model number, sort it and then return the highest.

This can be done by something like this:

def apply_text(text):
    test_str = [text]
    test_new = tfidf_m.transform(test_str)
    prediction = 0
    percentage_list = []
    for m in range(0,5):
        percentage = '{P:.1}'.format(M=cat[m], P=lr_m[m].predict_proba(test_new)[0][1])
        percentage_list.append([m+1, float(percentage)])

    percentage_list.sort(reverse=True, key=lambda a: a[1])
    return percentage_list[0][0]

Things to note:

  1. Sorting in reverse order as default is ascending. You could skip reversing and access the last element of precentage_list by accessing -1 element

  2. The key function is used as we need to sort using the percentage

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM