Playing only his second ODI after a long injury lay-off, Shami picked up four wickets giving 48 runs from his 10 overs to pull West Indies back.
Besides Shami, Umesh Yadav gave him ample support from the other end and returned with impressive figures of three for 53.
For West Indies, Shai Hope top-scored with a patient 51 off 98 balls during which he hit just five boundaries, while his brother Kyle made 46 off 50 deliveries with nine fours to his credit.
Later chasing the total, India hardly faced any trouble as Kohli (111 not out) and ever-consistent Ajinkya Rahane (39 off 51) shared 79 runs for the second wicket in 17.5 overs to set the platform for the comfortable win.
Today's match was a test of character for Kohli and his men after the unexpected 11 run loss against the hosts in the low-scoring fourth ODI in Antigua.
But Kohli meant business as he anchored India's chase with his 28th ODI century that came off 115 balls and was studded with 12 fours and two sixes
Besides the early dismissal of Shikhar Dhawan, the Indians were in complete control of the chase.
In the pursuit of the target, India lost Dhawan in the last delivery of the opening over, caught by Evin Lewis off Alzarri Joseph.
But thereafter, it was Kohli and Rahane's show as the duo dominated the proceedings with consummate ease.
While ever-consistent Rahane played the second fiddle, Kohli played with aggression from the onset.
But Rahane was unlucky to miss out on his fifth consecutive half-century of the series as he was dismissed Devendra Bishoo adjudged LBW in the 19th over. He struck five boundaries during his knock.
But Kohli played a chanceless knock and dictated the terms. He showed his class and brought up his 28th ODI century, a record 18th while chasing, with a boundary of Kesrick Williams.
Together with Dinesh Karthik (50 not off 52 balls), Kohli stitched unbeaten 122 runs for the third wicket to take India home with 79 balls to spare.
Earlier opting to bat, West Indies made a decent start before the hosts lost their first wicket in the ninth over when Lewis (9) was caught by India skipper Kohli off the Hardik Pandya's (1/27) second delivery of the innings.
Hope brothers, Kyle and Shai then shared 37 runs off 45 balls for the second wicket before Umesh struck twin blows in consecutive balls to peg West Indies back.
Kyle, who was looking good, struck Umesh for two consecutive boundaries in the 16th over but in search of one too many he perished, picking out Dhawan at midwicket while trying to attempt for an ambitious pull.
Umesh then had Roston Chase LBW for a duck with a full and straight delivery in the next ball. The batsman went for the review but to no avail with West Indies slumping to 76 for three by the end of the 16th over.
Shai and Jason Mohammed (16) then stitched 39 for the fourth wicket before Kedar Jadhav (1/13) struck with his golden arm, dismissing the latter with a straight forward return catch.
Young Shai held one end up and played with caution to notch up his second half-century of the series in the 38th over.
Together with skipper Jason Holder, Shai added 48 runs for the fifth wicket to keep West Indies' innings afloat.
While Shai played with caution, Holder was aggressive from the onset and piled up his 36 runs off just 34 balls with the help of four boundaries and one six.
But an irresponsible shot led to Holder's dismissal as he was holed out to Dhawan at long-on to hand Shami his first wicket.
An over later Shami struck again when he dismissed Shai with the set batsman attempting an ambitious shot and Ajinkya Rahane did the rest by latching on to an outstanding running catch at midwicket.
Shami again struck in his next over removing Ashley Nurse, who chipped one straight to Kuldeep Yadav at short midwicket.
Shami also accounted for Devendra Bishoo, caugh by Dhoni behind the stumps.
Rovman Powell (31 off 32 balls) played a good hand towards the end to get West Indies past the 200-run mark.