I was reading on the Bitcoin wiki (https://en.bitcoin.it/wiki/Transaction_fees ) that a user can set his own fees when conducting a bitcoin transaction. Like many, I have a Coinbase account, but I don't see anywhere in there where I can set the transaction fee. Is this something the exchanges come up with? How do they figure out what transaction fee to propose so that the transaction will be accepted by miners?
Coinbase is a custodial bitcoin wallet so, I think you can't set a custom fee for a transaction.
Bitcoin-core GUI using estimateSmartFee function to get estimate transaction fee.
estimateSmartFee getting the estimated fee sent with each transaction in the mempool.
Coinbase does not allow you to set fees, and has been called out for their practices in this regard, as have others. The surest way to have control over what happens with your Bitcoin is to interact with the Bitcoin network directly via a full node, and to not rely on, or trust third party services. This is precisely why Bitcoin exists.
Exchanges set their own fees because they are the custodian of your funds. They could charge you more or less than the network actually costs. Some exchanges charge a higher fee in order to ensure your transaction has priority over others that are trying to send coins at the same time. Some exchanges may charge you more than the network fee and pocket the rest. This behavior generally drives up the cost to transact on the network.
If you decide to become the custodian of your own funds you will have more control over the fee that you are willing to pay. With a little bit of patience and monitoring of the mempool you will find that it is rather simple to get a transaction confirmed with a fee at a fraction of what exchanges generally charge.
Also, FYI, because you mentioned Coinbase, you can actually send crypto on-chain transactions for free through Coinbase Pro (they pay for it).