Siege units are the only realistic way to take cities after walls for the most part. You have to plan and line up 2 or 3 at once because the AI is smart enough to target them over your melee walls.
Siege units really shine when they get the level 3 volley promotion that adds in an extra +50% to attacks on cities. You will eat away 15% to 20% of the cities health each hit. You will usually be attacking cities close to your boarder, make sure you have your roads going right up to the boarder of the enemy territory. If you have them to spare using a great general to expand your territory makes this even easier. If you can snipe the capital, you won. The AI will always vassal once you take their capital. This of course can become an issue if your aren't attacking a civ that shares boarders with yourself, but that's the game and reflects real life.
Skirmishers only scratch cities, and if you are using them to take cities it will take forever. Skirmishers are amazing defensive units because you can use your roads to hit and run units. They are alright on the offensive, but it depends heavily on terrain. If you have lots of open terrain you can pick off whole armies. Because ranged mounted units are so good, melee mounted are kind of garbage.
Ranged units draw back is they do crap damage towards cities. You can use them to get your melee close to cities because they are alright support units, but after than they are just in the way. Your main goal should be attacking enemies that share your boarder, I find if I try to use ranged units they end up having to pull back to make room for my siege units before they really do much. Due to ranged mounted units are so much better you should focus on using them in place. Ranged units also tend to get worse and worse as the game progresses while siege units just get better and better.